在 Swift 中,为什么我必须强制解包用 !在三元表达式中使用它们之前



这段代码不起作用。它会导致分段错误。使用 ! 初始化变量的全部要点!而不是?是这样我就可以使用它来自动解开包装。为什么会这样呢?

var isFoo: Bool!
override func viewDidLoad() {
    super.viewDidLoad()
    isFoo = true
    print(getNumber())
}
func getNumber() -> Int {
    return isFoo ? 1 : 0
}

相反,我必须写:

func getNumber() -> Int {
    return isFoo! ? 1 : 0
}

最烦人的是,编译器只会给我一个分段错误:11,这让我调试了一个多小时,得出的结论是这是引入错误的地方。在我尝试编译之前,它不会意识到代码有任何问题。我错过了什么吗?

一个最小的工作示例。

这给了我现在的问题:

var isFoo: Bool?
func getNumber() -> Int {
    return isFoo! ? 1 : 0
}
isFoo = true
print(getNumber())

这导致编译器崩溃,并显示消息While emitting SIL for 'getNumber'(也使SourceKit崩溃(:

var isFoo: Bool!
func getNumber() -> Int {
    return isFoo ? 1 : 0
}
isFoo = true
print(getNumber())

对我来说看起来像一个编译器错误。看起来像这个提案引入的错误:废除隐式解包可选类型

我在操场上尝试了这个,它也在那里崩溃了。有趣的是,游乐场居然要求我提交错误报告!我会...

现在,几个月后,我收到了苹果的回复,要求我使用最新的XCode 9.3 Beta进行测试。我这样做了,这个错误似乎已经修复。

相关内容

  • 没有找到相关文章

最新更新