27

Xcode 8 beta 6 をインストールした後、次のような警告が表示されます。

インスタンス メソッド 'application(_:didFinishLaunchingWithOptions:)' は、プロトコル 'UIApplicationDelegate' のオプション要件 'application(_:didFinishLaunchingWithOptions:)' とほぼ一致します

私のアプリデリゲートで。

警告を消すには、次の 2 つの修正方法をお勧めします。

  1. メソッドをプライベートとしてマークする
  2. @nonobjc をメソッドに追加

どちらかを実行すると、警告が消えます。しかし、なぜこれを行う必要があるのでしょうか。

4

2 に答える 2

53

iOS 12 SDK アップデート

iOS 12 SDK (Xcode 10 に付属) では、名前がネストされた typeにUIApplicationLaunchOptionsKey 変更さUIApplication.LaunchOptionsKeyれたため、次のものが必要になります。

func application(
  _ application: UIApplication,
  didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
    // ...
}

iOS 10 および 11 SDK (Xcode 8 および 9)

この警告は、デリゲート メソッドのdidFinishLaunchingWithOptions:パラメーターがではなく として Swift にブリッジされるようになったためです。application(_:didFinishLaunchingWithOptions:)[UIApplicationLaunchOptionsKey: Any]?[NSObject : AnyObject]?

したがって、この変更を反映するように実装を更新する必要があります。

func application(
  _ application: UIApplication,
  didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?
) -> Bool {
    // ...
}

Xcode が提案する修正はどちらも実際には問題を修正しないことに注意してくださいapplication(_:didFinishLaunchingWithOptions:)。Objective-C からの実装を隠すだけです。つまり、実際に呼び出されることはありません。

于 2016-08-16T11:05:47.757 に答える