通过分发事件实现 Lighter AppDelegate
要运行示例项目,请克隆仓库,然后首先从 Example 目录运行 pod install
。
UIApplicationDelegate
事件分发给特定的 Service
类。我们可以有 RootService,DebugService,AnalyticsService,...class RootService : NSObject, UIApplicationDelegate {
func application(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
appDelegate().window = UIWindow(frame: UIScreen.mainScreen().bounds)
showHome()
appDelegate().window?.makeKeyAndVisible()
return true
}
}
extension RootService {
func showHome() {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
appDelegate().window?.rootViewController = storyboard.instantiateInitialViewController()
}
}
extension RootService {
func appDelegate() -> AppDelegate {
return UIApplication.sharedApplication().delegate as! AppDelegate
}
}
Dispatcher
。UIApplicationDelegate
事件分发给 Dispatcher
。@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
let dispatcher = Dispatcher(services: [RootService()])
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
return dispatcher.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
LighterAppDelegate
协议。dispatcher()
。LighterAppDelegate
包含具有默认实现(适用于常见用法)的协议扩展,用于 App 状态更改
和 URL
事件。Dispatcher
。@UIApplicationMain
class AppDelegate: UIResponder, LighterAppDelegate {
var window: UIWindow?
let simpleDispatcher = Dispatcher(services: [RootService()])
func dispatcher() -> Dispatcher {
return simpleDispatcher
}
func applicationDidReceiveMemoryWarning(application: UIApplication) {
dispatcher().applicationDidReceiveMemoryWarning(application)
}
}
UIApplicationDelegate
函数。不必要的函数可能导致问题。您已实现 -[ application:performFetchWithCompletionHandler:],但您仍然需要在 Info.plist 中的支持的 UIBackgroundModes 列表中添加 "fetch"。
您已实现 -[ application:didReceiveRemoteNotification:fetchCompletionHandler:],但您仍然需要在 Info.plist 中的支持的 UIBackgroundModes 列表中添加 "remote-notification"。
remoteNotification
事件时,请考虑使您的应用支持 推送通知。您的应用似乎包含用于注册 Apple 推送通知服务的 API,但应用的签名权限不包括 "aps-environment" 权限。
UIApplicationDelegate
函数,就会遇到这个问题。这不是 LighterAppDelegate
的问题,因为函数是在其协议扩展中实现的!!LighterAppDelegate 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod "LighterAppDelegate"
作者信息来源于 http://sizeof.io/service-oriented-appdelegate/
Khoa Pham, [email protected]
LighterAppDelegate 在 MIT 许可证下提供。有关更多信息,请参阅 LICENSE 文件。