首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展UIApplicationDelegate协议

扩展UIApplicationDelegate协议
EN

Stack Overflow用户
提问于 2016-03-29 11:20:20
回答 3查看 2.4K关注 0票数 2

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

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

谢谢

AppDelegate.swift:

代码语言:javascript
复制
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?
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-29 13:25:14

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

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

我们不能做的是:为Objective协议提供默认实现。

票数 0
EN

Stack Overflow用户

发布于 2017-10-09 13:20:10

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

代码语言:javascript
复制
#import <UIKit/UIKit.h>

@interface NSObject (BasicMethods) <UIApplicationDelegate>

@end

使用

代码语言:javascript
复制
#import "UIApplicationDelegate+BasicMethods.h"

@implementation NSObject (BasicMethods)

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

@end

很管用。

票数 0
EN

Stack Overflow用户

发布于 2016-03-29 12:56:14

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

原因如下:

  1. 协议只包含函数声明,但扩展需要函数定义。
  2. 协议只不过是一组规则(方法)。它不分配任何内存。
  3. 协议函数定义将在委托类中。所以函数调用永远不会出现在函数定义中,而函数定义是在扩展中编写的。
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36282835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档