Xcode 8ベータ6をインストールした後、次のような警告が表示されます。
インスタンスメソッド「application(_:didFinishLaunchingWithOptions :)」は、プロトコル「UIApplicationDelegate」のオプション要件「application(_:didFinishLaunchingWithOptions :)」にほぼ一致します。
私のアプリデリゲートで。
警告を消すために推奨される2つの修正があります。
どちらかを行うと、警告が沈黙します。しかし、なぜこれを行う必要があるのでしょうか?
IOS 12 SDK(Xcode 10に同梱)では、UIApplicationLaunchOptionsKey
名前が変更されました がネストされたタイプUIApplication.LaunchOptionsKey
になります。
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
// ...
}
この警告は、 application(_:didFinishLaunchingWithOptions:)
デリゲートメソッドのdidFinishLaunchingWithOptions:
パラメーターがSwiftとしてではなく、[UIApplicationLaunchOptionsKey: Any]?
としてブリッジされる]という事実に起因します。 [NSObject : AnyObject]?
。
したがって、この変更を反映するには実装を更新する必要があります。
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?
) -> Bool {
// ...
}
Xcodeの提案された修正はどちらも実際に問題を修正しないことに注意してください。Objective-Cからapplication(_:didFinishLaunchingWithOptions:)
の実装を隠すだけです。つまり、実際に呼び出されることはありません。
関数に渡される最初のパラメーターには外部名がありません。このメソッドを直接呼び出さないので、これは実際にはほんのわずかな詳細であり、コンパイラを満足させるための簡単な修正です。最初のパラメーター名を_に手動で編集するか、Xcodeにこれを処理させることができます。
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool
または新しい構文
func application(_ application:UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool // or remove = nil and try