我想扩展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?
}
答案 0 :(得分:1)
事实证明,您无法通过扩展为Objective-C协议提供默认实现。有关协议扩展的详细限制列表,请参阅以下链接。
我们能做什么:为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)
没有使用协议扩展。
原因是:
- 协议仅包含函数声明,但扩展需要函数定义。
- 协议只不过是一套规则(方法)。它没有分配任何内存。
- 协议函数定义将在委托类中。所以函数调用永远不会出现在你的函数定义中 写在扩展名。
醇>