【发布时间】:2017-01-06 23:22:16
【问题描述】:
谁能告诉我为什么这个选角有异常?
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 显示以下消息:
错误:执行被中断,原因:EXC_BAD_INSTRUCTION (代码=EXC_I386_INVOP,子代码=0x0)
一些上下文:
实际代码属于 iOS 应用程序,但您可以在 Playground 中尝试此示例,但会出现错误。
我正在使用 Xcode 8.2.1 迁移工具将一些代码迁移到 Swift 3。 Xcode 正在建议转换,它构建成功,但是从单元测试运行代码时,它会失败。
感谢您的帮助。
更新
清理了一下,发现了这个:
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)
错误信息:
隐式展开的选项只允许在顶层和作为 函数结果
所以它与废除隐式展开的可选参数作为参数有关...... https://github.com/apple/swift-evolution/blob/master/proposals/0054-abolish-iuo.md
【问题讨论】: