这是一些游乐场代码:
func getNone<T>() -> T {
print(T.self)
let none: Bool? = nil
return none as! T
}
let noMore: Bool? = getNone()
但是,此代码会导致found nil while unwrapping optional error
。我想知道为什么会发生这种情况,因为T
在这种情况下显然是Bool?
- 来自print语句 - 并且nil
转换为Bool?
并没有&#39} ; t导致此错误。
答案 0 :(得分:1)
这看起来像Swift中的一个bug给我。我甚至添加了几个印刷语句来强调这一点:
func getNone<T>() -> T {
let none: Bool? = nil
print(type(of: none) == T.self) // prints "true"
print(none is T) // prints "false". How can that be given the above is true?
return none as! T // crashes
}
let noMore: Bool? = getNone()
围绕类似/相关行为已经提出了一些错误。例如:
https://bugs.swift.org/browse/SR-4248
https://bugs.swift.org/browse/SR-158
他们建议Hamish在下面的评论中指出相同的解决方法。几乎可以肯定的是,在这种情况下你确实偶然发现了一个Swift错误。