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-directional-programming-with-uikit

できないこと: Objective-C プロトコルのデフォルトの実装を提供する。

于 2016-03-29T13:25:14.613 に答える
-2

プロトコルの拡張を行う必要はありません。
理由は次のとおりです。

  1. プロトコルには関数宣言のみが含まれますが、拡張には関数定義が必要です。
  2. プロトコルは単なるルール (メソッド) のセットにすぎません。メモリを割り当てません。
  3. プロトコル関数の定義はデリゲート クラスになります。そのため、拡張で記述した関数定義に関数呼び出しが来ることはありません。
于 2016-03-29T12:56:14.067 に答える