我创建了一些测试代码来显示我遇到的问题。
这在操场上编译得很好,但是,当我尝试将其放入项目时,Xcode 会给出以下警告:Treating a forced downcast to 'String' as optional will never produce 'nil'
on line 30。我有两个建议来解决这个问题:
Use 'as?' to perform a conditional downcast to 'String'
,这完全没有意义。但是,它确实在没有警告/错误的情况下编译,这看起来很奇怪,因为它将可选值分配给非可选类型的String
.当您不确定向下转换是否会成功时,请使用类型转换运算符(as?)的条件形式。这种形式的运算符将始终返回一个可选值,如果无法进行向下转换,则该值将为 nil。这使您能够检查是否成功向下转换。
来自Swift 语言指南。
除非它认为如果转换失败(因此删除字典条目)我可能想要分配
nil
,这是没有意义的。特别是因为我确信它会成功,因为我实际上只是检查它是否是String
.Add parentheses around the cast to silence this warning
,这似乎毫无意义,但确实使警告静音。这似乎是一件奇怪的事情,但话又说回来,这可能只是确认你真的想做你想做的事情的一种糟糕的方式。
哪个选项是对的,或者都不对?是什么导致了这个警告?