gpt4 book ai didi

Swift AnyObject 转换

转载 作者:搜寻专家 更新时间:2023-10-31 22:06:35 25 4
gpt4 key购买 nike

我创建了一些 test code显示我遇到的问题。

这在 Playground 上编译得很好,但是,当我尝试将它放入项目中时,Xcode 给出以下警告:Treating a forced downcast to 'String' as optional will never produce 'nil' 关于 line 30 .我得到了两个解决问题的建议:

  1. 使用“作为?”执行条件向下转换为“String”,这完全没有意义。然而,它编译时没有警告/错误,这看起来很奇怪,因为它正在为非可选类型的 String 分配一个可选值。

    Use the conditional form of the type cast operator (as?) when you are not sure if the downcast will succeed. This form of the operator will always return an optional value, and the value will be nil if the downcast was not possible. This enables you to check for a successful downcast.

    来自Swift language guide .

    除非它认为如果转换失败我可能想分配 nil(因此删除字典条目),否则这是没有意义的。特别是因为我确信它会成功,因为我实际上只是检查它是否是 String

  2. 在强制转换周围添加括号以消除此警告,这似乎毫无意义,但确实消除了警告。这似乎是一件奇怪的事情,但话又说回来,这可能只是确认你真的想做你想做的事情的一种糟糕方式。


哪个选项是正确的,还是都不正确?是什么导致了这个警告?

最佳答案

正确的解决方案是使用可选绑定(bind)而不是强制解包运算符 !。实际上你可以合并支票value != nilswitch 语句中:

for (key, value) in dict {
switch value {
case let s as String:
newDict[key] = s
case let i as Int:
newDict[key] = String(i)
case let b as Bool:
newDict[key] = b ? "1" : "0"
case let v?: // value is not `nil`
newDict[key] = String(v)
default: // value is `nil`
break
}
}

关于Swift AnyObject 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37643581/

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