var someString =“Some String”,var someString:String =“Some String”,var someString =“Some String”as string

时间:2015-06-06 04:30:12

标签: ios swift

任何人都可以向我解释差异

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

1 个答案:

答案 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)
}