每当我们需要在swift中使用可选值进行操作时,我们需要将其解包以进行操作,而不是在可选项上,而是在“可选内部”的值内。
var optionalString:String? = "Hello"
optionalString!.append(" World!")
请注意第二行上的感叹号。
但是当在可选值上使用可选的类型转换操作符(作为?)时,不需要打开可选项,我们只提供可选的本身,它只是神奇地工作。
let sneakyString:Any? = "Hello!"
let notSoSneakyString = sneakyString as? String
注意第二行没有感叹号。
如果拼写出来,魔术会更明显:
let sneakyString:Any? = Optional("Hello")
let notSoSneakyString = sneakyString as? String
它不是我们试图播放的字符串,而是一个字符串作为关联值的枚举。
我希望我必须这样做:
let sneakyString:Any? = "Hello!"
let notSoSneakyString = sneakyString! as? String
请注意第二行上的感叹号。
类型转换操作符是否以相同的方式作用于期权和非期权?
答案 0 :(得分:1)
as?
运算符在可能的情况下进行强制转换,并返回已转换的对象或nil
。它也处理nil值,因此如果sneakyString
为零,则无法将其转换为String
并且转换将失败。同样的行为就好像它是非零但不能转换为String
。
换句话说,您不需要!
,因为as?
会自动处理nil值。