2016-03-29 22 views
1

UIApplicationDelegateプロトコルを拡張し、application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Boolメソッドのデフォルト実装を提供したいと思います。しかし、私が提供したデフォルトの実装は呼び出されません。UIApplicationDelegateプロトコルを拡張する

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

は、作成時にアプリが迅速かobj-cですか?あなたの内線内のすべてのコードですか?あなたはデリゲートインスタンスセットを持っていますか、それはどのような機能を実装していますか? – Wain

+1

これで何を達成しようとしているのですか、私は興味がありますか? appDelegateが1つしかないので、appDelegateにデフォルト実装を与えることはできません。 – crashoverride777

+1

@ crashoverride777私はプッシュ通知関連の機能を提供するポッドを持つ複数のプロジェクトで使用できるプロトコル(UIPushNotificationDelegateなど)を開発したいと考えています。また、UIApplicationDelegateプロトコルを拡張し、implementerがUIPushNotificationDelegateのときにdidRegisterForRemoteNotificationsWithDeviceTokenのデフォルトの実装を提供し、デフォルト実装としてUIPushNotificationDelegateメソッドを使用してデバイストークンをサーバーに送信したいとします。 – user1994321

答えて

1

あなたは、拡張を介してObjective-Cプロトコルのデフォルトの実装を提供することはできません。プロトコル拡張に関する制限の詳細なリストについては、下のリンクを参照してください。

https://www.captechconsulting.com/blogs/ios-9-tutorial-series-protocol-oriented-programming-with-uikit私たちが行うことはできませんどのような:Objective-Cのプロトコルのデフォルトの実装を提供します。

-2

プロトコルの拡張を行うことのない使用はありません。
理由は以下のとおりです。

  1. プロトコルのみの関数宣言が含まれていますが、拡張子は関数定義を必要とします。
  2. プロトコルはルール(メソッド)のセットだけです。メモリを割り当てません。
  3. プロトコル機能の定義は、委任クラスになります。したがって、関数の呼び出しは、あなたが 拡張で書かれた関数の定義に決して来ません。
+0

それでは、なぜこの機能は言語にも存在しますか?特に初心者からはそれがなかったと考えています。 – nhgrif

+0

プロトコル拡張はSwiftプログラミング言語の一部です... – user1994321

0

同じ問題が発生しましたが、この特定のファイルでは、この機能を実現するためにObjective-Cに戻しました。

#import "UIApplicationDelegate+BasicMethods.h" 

@implementation NSObject (BasicMethods) 

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

@end 

作品と

#import <UIKit/UIKit.h> 

@interface NSObject (BasicMethods) <UIApplicationDelegate> 

@end 

関連する問題