gpt4 book ai didi

ios - 类型转换时的 Swift 3 迁移 EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:34:35 24 4
gpt4 key购买 nike

谁能告诉我为什么这个转换有异常(exception)?

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 应用程序,但您可以在 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)

错误信息:

Implicitly unwrapped optionals are only allowed at top level and as function results

所以它与废除隐式展开的可选参数作为参数有关...... https://github.com/apple/swift-evolution/blob/master/proposals/0054-abolish-iuo.md

最佳答案

据我所知,目前在 Swift 中是不可能的。对我来说,这根本不合逻辑,如果我们谈论闭包在内部是如何工作的——它们为每个存储参数的闭包创建类,所以你的代码看起来像这样

class A {
var param1: NSNumber!
var param2: Int
}

class B {
var param1: NSNumber?
var param2: Int
}

然后您尝试将类 A 的实例转换为类 B,这有点奇怪,对吧?

关于ios - 类型转换时的 Swift 3 迁移 EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41515961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com