このキャストに例外がある理由は誰にも分かりますか?キャスト時のSwift 3の移行EXC_BAD_INSTRUCTION(コード= EXC_I386_INVOP、サブコード= 0x0)
func aSpecialMethod(colorRange: @escaping (NSNumber?,Int) -> [Any]!) {
print("do something here")
}
let colorRange = { (param1: NSNumber!, param2: Int) -> [Any]! in
return [UIColor.red]
} as! (NSNumber?, Int) -> [Any]!
aSpecialMethod(colorRange: colorRange)
は、Xcodeは、次のメッセージが表示されます。
error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
いくつかのコンテキスト:
実際のコードは、iOSアプリケーションに属していますが、運動場でこのサンプルを試すことができますし、エラーが発生します。
私はいくつかのコードをXcode 8.2.1移行ツールを使用してSwift 3に移行しています。キャストはXcodeによって提案されていますが、成功してビルドされますが、単体テストからコードを実行すると失敗します。
ありがとうございました。少しのクリーンアップ
UPDATE
、これが見つかりました:
func aSpecialMethod(colorRange: @escaping (NSNumber?,Int) -> [Any]!) {
print("do something here")
}
let colorRange = { (param1: NSNumber!, param2: Int) -> [Any]! in
return [UIColor.red]
} as (NSNumber!, Int) -> [Any]!
aSpecialMethod(colorRange: colorRange)
エラーメッセージ:
Implicitly unwrapped optionals are only allowed at top level and as function results
だからそれがパラメータとして暗黙的に開封されたoptionalsの廃止に関係しています... https://github.com/apple/swift-evolution/blob/master/proposals/0054-abolish-iuo.md