2

我想扩展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?
}
4

3 回答 3

0

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

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

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

于 2016-03-29T13:25:14.613 回答
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

作品。

于 2017-10-09T13:20:10.887 回答
-2

对协议进行扩展是没有用的。
原因是:

  1. 协议只包含函数声明,但扩展需要函数定义。
  2. 协议只不过是一组规则(方法)。它不分配任何内存。
  3. 协议函数定义将在委托类中。所以函数调用永远不会出现在你在扩展中编写的函数定义中。
于 2016-03-29T12:56:14.067 回答