swift - 强制转换可选值

标签 swift

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

相关文章:

ios - 在 iOS 的 Google Maps SDK 中启用方向

arrays - 在TableView中检索多个子分支Firebase Swift 4

swift - 如何在 Swift 中为泛型类创建单例

swift - 对 UIView 扩展的文本颜色进行动画处理

swift - Swift 字典如何用于存储通用对象 [T : C<T>]?

ios - 从左侧在 UILabel 中插入文本

ios - 如何在异步图像下载和调整图像高度后更新 tableview 单元格

ios - 如何自行调整单元格大小?

mysql - 在另一个 View Controller 中使用 Xcode 函数

ios - prepareForSegue 不能快速工作。我该如何解决?