var optionalString: String? = "Hello"
optionalString == nil
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
如上代码: ?=
赋值适用于什么场景
var optionalString: String? = "Hello"
optionalString == nil
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
如上代码: ?=
赋值适用于什么场景
据我猜想是这样的:因为Swift其实是门静态类型语言,而变量类型的确定是依赖于变量初值的,如果你需要一个初值为nil的String变量,那么你可能会直接这么写:
var optionalName = nil
但这样写就麻烦了,因为这样编译器就没法从nil分析出这变量的类型了,但如果是String(nil)的话,实际上就不一定是返回nil了(而是调用构造器)。所以Swift送给程序员一个:类型?=初值
的语法好让程序员们将初值赋为nil并仍保证自身是静态类型。
和Java不同,Swift中除Optional类型之外,其它类型和nil不兼容,所以你不能写var s:String = nil
,这样会报一个错误:Could not find an overload for '__conversion' that accepts the supplied arguments
所以,当你要创建一个“可以为空”的变量时,你就必须用Type?
,它的意思就是Type or nil
。
这个问题这样问说明没理解“可选型”——这不是“?=”赋值,而是定义变量为 String? 类型,这个类型在没有任何值的时候是nil;而在有值的时候会被表示成 some:"xxxx" 这样。
当你需要操作这个 String? 型变量的时候,你需要用 ! 把它转成 String 类型,这时候它的值就是"xxxx"了