LighterAppDelegate 0.1.0

LighterAppDelegate 0.1.0

测试已测试
语言语言 SwiftSwift
许可协议 MIT
发布日期最后发布日期2016年1月
SPM支持 SPM

Khoa Pham 维护。



通过分发事件实现 Lighter AppDelegate

用法

要运行示例项目,请克隆仓库,然后首先从 Example 目录运行 pod install

功能

分发事件

  • Lighter AppDelegate
  • 您可以通过组合或协议遵从来使用
  • 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 事件。
  • 如果您想接收更多事件,请在您的 AppDelegate 中添加更多函数,并将它们分发给您的 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" 权限。

  • 如果您在 AppDelegate 中实现了 UIApplicationDelegate 函数,就会遇到这个问题。这不是 LighterAppDelegate 的问题,因为函数是在其协议扩展中实现的!!

安装

LighterAppDelegate 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中

pod "LighterAppDelegate"

作者信息

作者信息来源于 http://sizeof.io/service-oriented-appdelegate/

作者

Khoa Pham, [email protected]

授权

LighterAppDelegate 在 MIT 许可证下提供。有关更多信息,请参阅 LICENSE 文件。