任何人都可以向我解释差异
var someString = “Some String”
var someString: String = “Some String”
var someString = “Some String” as String
var someString = “Some String” as! String
var someString = “Some String” as? String
答案 0 :(得分:15)
let someString = “Some String”
let someString: String = “Some String”
对于这两个:
两者之间的运行效率差异为零。在编译期间,Swift会推断出类型并为您编写代码。但是一旦编译完毕,这两个陈述是完全相同的。
let someString = “Some String” as String
表示如果字符串不是字符串,则将someString
值转换为字符串。
let someString = “Some String” as! String
意味着您强行将“Some String”强制转换为字符串,但如果它不能转换为字符串,则会使应用程序崩溃。
let someString = “Some String” as? String
意味着您可以选择将“Some String”
强制转换为字符串,如果它不能转换为字符串,那么它将返回nil,但此时不会崩溃。
对于最后3个语句它将编译并工作,但将String转换为String绝对是错误的。无需将String
转换为String
。
最后2 as?
和as!
在你的情况下总会成功。
请考虑以下示例:
let stringObject: AnyObject = "Some String"
let someString3 = stringObject as! String
let someString5 = stringObject as? String
这是你需要施展的时候。仅当您知道它是一个字符串时才使用as!
。如果您不知道它是否为字符串,请使用as?
。
如果您确定使用条件转换,则仅使用as!
强制转发:
if let someString5 = stringObject as? String {
println(someString5)
}