每当我们需要在 swift 中对带有可选值的东西进行 du 操作时,我们需要将其解包以进行操作,而不是对可选值进行操作,而是对可选值“内部”的值进行操作。
var optionalString:String? = "Hello"
optionalString!.append(" World!")
注意第二行的感叹号。
但是当在可选值上使用可选类型转换运算符(as?)时,不需要解包可选值,我们只需为它提供可选值本身,它就神奇地工作了。
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
注意第二行的感叹号。
类型转换运算符是否以相同的方式作用于可选值和非可选值?
最佳答案
如果可能,as?
运算符会进行强制转换,并返回强制转换的对象或 nil
。它也处理 nil 值,因此如果 sneakyString
为 nil,您将无法将其转换为 String
,并且转换会失败。与非零但不可转换为 String
的行为相同。
换句话说,您不需要 !
,因为 as?
会自动处理 nil 值。
关于swift - 强制转换可选值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39185503/