gpt4 book ai didi

swift - 为什么通用函数在转换为相同类型时会崩溃?

转载 作者:行者123 更新时间:2023-11-28 06:07:27 25 4
gpt4 key购买 nike

这是一些 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/

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