这段代码不起作用。它会导致分段错误。使用 ! 初始化变量的全部要点!而不是?是这样我就可以使用它来自动解开包装。为什么会这样呢?
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进行测试。我这样做了,这个错误似乎已经修复。