Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 扩展UIApplicationLegate协议_Ios_Swift_Uiapplicationdelegate_Protocol Extension - Fatal编程技术网

Ios 扩展UIApplicationLegate协议

Ios 扩展UIApplicationLegate协议,ios,swift,uiapplicationdelegate,protocol-extension,Ios,Swift,Uiapplicationdelegate,Protocol Extension,我想扩展uiapplicationelegate协议,并为应用程序(应用程序:UIApplication,didfishlaunchingwithoptions启动选项:[NSObject:AnyObject]?)->Bool方法提供默认实现。但是,我提供的默认实现不会被调用 是否有可能扩展uiapplicationelegate协议(相对于UIApplication是一个单例,或者协议方法是可选的),或者我做错了什么 谢谢 AppDelegate.swift: import UIKit ext

我想扩展
uiapplicationelegate
协议,并为
应用程序(应用程序:UIApplication,didfishlaunchingwithoptions启动选项:[NSObject:AnyObject]?)->Bool
方法提供默认实现。但是,我提供的默认实现不会被调用

是否有可能扩展
uiapplicationelegate
协议(相对于
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?
}

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

  • 协议只包含函数声明,但扩展需要函数定义
  • 协议只是一组规则(方法)。它不分配任何内存
  • 协议函数定义将在委托类中。所以函数调用永远不会涉及到您需要的函数定义 用扩展名写的

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

  • 协议只包含函数声明,但扩展需要函数定义
  • 协议只是一组规则(方法)。它不分配任何内存
  • 协议函数定义将在委托类中。所以函数调用永远不会涉及到您需要的函数定义 用扩展名写的

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

    我们不能做的事情:为Objective-C协议提供默认实现


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

    我们不能做的事情:为Objective-C协议提供默认实现


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

    #import <UIKit/UIKit.h>
    
    @interface NSObject (BasicMethods) <UIApplicationDelegate>
    
    @end
    

    工作。

    我遇到了同样的问题,对于这个特定的文件,我恢复到Objective-C以实现此功能

    #import <UIKit/UIKit.h>
    
    @interface NSObject (BasicMethods) <UIApplicationDelegate>
    
    @end
    

    有效。

    应用程序创建时是swift还是obj-c?这就是你分机的全部代码吗?你有委托实例集吗?它实现了什么功能?我很好奇,你想用它实现什么?我不认为给appDelegate一个默认实现有什么意义,因为只有一个appDelegate。@CrashoverIDE777我想开发一个协议,可以在多个项目中使用POD,它提供推送通知相关的功能(比如UIPushNotificationDelegate)。我还想扩展UIApplicationLegate协议,当实现者为UIPushNotificationDelegate时,为didRegisterForRemoteNotificationsWithDeviceToken提供默认实现,并使用UIPushNotificationDelegate方法作为默认实现将设备令牌发送到服务器。@Wain我已添加了整个AppDelegate.swift文件。这从一开始就是一个迅速的申请。项目代码只包含对我的AppDelegate文件和swift单页应用程序模板附带的默认文件的更改。谢谢。这听起来很有趣。我不能回答你的问题,因为我还没有为appDelegates使用协议扩展,所以我不确定它是否真的有效,或者你是否犯了错误。应用程序是swift还是obj-c在创建时?这就是你分机的全部代码吗?你有委托实例集吗?它实现了什么功能?我很好奇,你想用它实现什么?我不认为给appDelegate一个默认实现有什么意义,因为只有一个appDelegate。@CrashoverIDE777我想开发一个协议,可以在多个项目中使用POD,它提供推送通知相关的功能(比如UIPushNotificationDelegate)。我还想扩展UIApplicationLegate协议,当实现者为UIPushNotificationDelegate时,为didRegisterForRemoteNotificationsWithDeviceToken提供默认实现,并使用UIPushNotificationDelegate方法作为默认实现将设备令牌发送到服务器。@Wain我已添加了整个AppDelegate.swift文件。这从一开始就是一个迅速的申请。项目代码只包含对我的AppDelegate文件和swift单页应用程序模板附带的默认文件的更改。谢谢。这听起来很有趣。我不能回答你的问题,因为我还没有为appDelegates使用协议扩展,所以我不确定它是否真的有效,或者你是否犯了错误。那么为什么这种语言中还存在这种功能呢?尤其是当我们认为它不是初学者的时候,那么为什么这个功能甚至存在于语言中呢?尤其是当我们认为它不是初学者的时候。