我创建了一些测试代码来展示我遇到的问题。
在playground中编译没有问题,但是当我尝试将它放入项目中时,Xcode会给出以下警告:将强制向下转型为“String”视为可选项永远不会产生“nil”
,位于第30行。我有两个修复问题的建议:
使用'as?'进行条件向下转换为'String',这似乎毫无意义。然而,它可以编译通过而没有警告/错误,这似乎很奇怪,因为它将可选值赋给了非可选类型的'String'。
当您不确定向下转换是否成功时,请使用类型转换运算符(as?)的条件形式。该运算符的这种形式将始终返回可选值,如果向下转换不可能,则该值将为nil。这使您能够检查向下转换是否成功。
来自Swift语言指南。
除非它认为我可能想要在转换失败时分配'nil'(从而删除字典条目),否则这没有任何意义。特别是因为我确信它会成功,因为我刚刚检查过它是否为'String'。
在强制转换周围添加括号以消除此警告,这似乎毫无意义,但确实消除了警告。这似乎是一种奇怪的做法,但另一方面,这可能只是确认您确实想要执行正在尝试执行的操作的一种不良方式。
哪个选项是正确的,或者两个都不是?是什么导致了这个警告?
AnyObject?
类型。其次,你应该尽可能避免使用!
进行可选类型的显式解包。 - user887210if let unwrapped = wrapped {}
。 - user887210