作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一些 Playground 代码:
func getNone<T>() -> T {
print(T.self)
let none: Bool? = nil
return none as! T
}
let noMore: Bool? = getNone()
但是,此代码会导致在展开可选错误时发现 nil
。我想知道为什么会发生这种情况,因为在这种情况下 T
显然是 Bool?
- 来自 print 语句 - 并将 nil
转换为Bool?
不会导致此错误。
最佳答案
在我看来,这像是 Swift 中的一个错误。我什至添加了更多打印语句来突出显示这一点:
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 错误。
关于swift - 为什么通用函数在转换为相同类型时会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47823706/
我创建了一个分支来开发新功能。由于这个新功能完全是作为一个新项目开发的,唯一可能的冲突来源是解决方案文件。 随着功能的开发,主分支更新了几次。当我完成开发和测试时,我做了: git checkout
我是一名优秀的程序员,十分优秀!