扩展UIApplicationDelegate协议

时间:2016-03-29 11:20:20

标签: ios swift uiapplicationdelegate protocol-extension

我想扩展UIApplicationDelegate协议并为application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool方法提供默认实现。但是,我提供的默认实现不会被调用。

是否有可能扩展UIApplicationDelegate协议(关于UIApplication是单例,或协议方法是可选的),还是我做错了什么?

谢谢

AppDelegate.swift:

import UIKit
extension UIApplicationDelegate{
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        print("does not print anything on launch.")
        return true
    }
}

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
}

3 个答案:

答案 0 :(得分:1)

事实证明,您无法通过扩展为Objective-C协议提供默认实现。有关协议扩展的详细限制列表,请参阅以下链接。

https://www.captechconsulting.com/blogs/ios-9-tutorial-series-protocol-oriented-programming-with-uikit

  

我们能做什么:为Objective-C协议提供默认实现。

答案 1 :(得分:0)

我遇到了同样的问题,对于这个特定的文件,我还是回到了Objective-C来实现这个功能。

#import <UIKit/UIKit.h>

@interface NSObject (BasicMethods) <UIApplicationDelegate>

@end

#import "UIApplicationDelegate+BasicMethods.h"

@implementation NSObject (BasicMethods)

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    NSLog(@"I'm getting called");
}

@end

作品。

答案 2 :(得分:-2)

没有使用协议扩展。
原因是:

  
      
  1. 协议仅包含函数声明,但扩展需要函数定义。
  2.   
  3. 协议只不过是一套规则(方法)。它没有分配任何内存。
  4.   
  5. 协议函数定义将在委托类中。所以函数调用永远不会出现在你的函数定义中   写在扩展名。
  6.