如何将一个可选字符串转换为 NSString
McFly 问到:我在这个地方一直报错:"不能将 先回答这个问题,在转换成其他类型之前必须将可选类型解包。 你不想强制解包,所以使用可选绑定那个字符串,然后将其转化为 let test = "abcdef" let optionalString = String(test) 更普遍的情况是可能读取字典里某个 key 对应的值,这个变量的类型实际上是 let optionalValue = dict["key"] 有一件事挺让我百思不得解的是,我们很少会遇到类型转换成 我问了 McFly 这个 //我之前的类有如下的声明 private var _imageURL: String? 无论怎样(忽略掉这里字符串类型的变量命名含有 “URL” 的罪孽),你有两个目标:
不要这样做: functionCall(string! as NSString) 比起不愿意鼓掌的小朋友,强制解包能更快地杀死的奇妙仙子(Tinkerbell)。相反的,应先选择拆包,然后类型转换: if let string = optionalString { myFunction(string as NSString) } (是的,通常使用和可选类型字符串变量一样的名字,来避免意外地与别的变量名重复的冲突。我这里想区分这新的绑定解包的变量和已经存在的可选类型字符串变量,就没有用一样的名字) 想一步得到一个可选绑定的 if let string = (optionalString as Optional<NSString>) { myFunction(string) } 对新手开发者来说这个解决方法挺简单的,因为可以解释成这样:“你想要一个 Optional<NSString> 的变量,然后手上的变量是 Optional<String>,用 if let string = optionalString.map({ $0 as NSString }) { myFunction(string) } 对初学者来说这不是一个特别浅显的解决方法。假设你已经知道可选类型的基本概念,通过可选类型枚举器来储存值或者空值,但当你没有函数式语言经验的时候,第一直觉并不会是清晰地采用 optional 的 map,更不用提集合(collections)。 此方法的优势是容易拓展成消除类型(type-erased)转换,。用 if let string = string.flatMap({ $0 as? NSString }) { myFunction(string) } 不管怎样,我和 McFly 说过我会将其整理成文章。结果,发现在 Swift 中类型转换从字典中取出的 我相信文章里面可能有哪里地方是我搞错了的,欢迎给我提供反馈和更正,非常感谢!
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |