输入投射可选值

时间:2016-08-27 20:32:34

标签: swift

每当我们需要在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

请注意第二行上的感叹号。

类型转换操作符是否以相同的方式作用于期权和非期权?

1 个答案:

答案 0 :(得分:1)

as?运算符在可能的情况下进行强制转换,并返回已转换的对象或nil。它也处理nil值,因此如果sneakyString为零,则无法将其转换为String并且转换将失败。同样的行为就好像它是非零但不能转换为String

换句话说,您不需要!,因为as?会自动处理nil值。