首页 > 怎么理解swift中的可选变量赋值

怎么理解swift中的可选变量赋值

var optionalString: String? = "Hello"
optionalString == nil

var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
    greeting = "Hello, \(name)"
}

如上代码: ?= 赋值适用于什么场景


和Java不同,Swift中除Optional类型之外,其它类型和nil不兼容,所以你不能写var s:String = nil,这样会报一个错误:
Could not find an overload for '__conversion' that accepts the supplied arguments

所以,当你要创建一个“可以为空”的变量时,你就必须用Type?,它的意思就是Type or nil


据我猜想是这样的:因为Swift其实是门静态类型语言,而变量类型的确定是依赖于变量初值的,如果你需要一个初值为nil的String变量,那么你可能会直接这么写:

var optionalName = nil

但这样写就麻烦了,因为这样编译器就没法从nil分析出这变量的类型了,但如果是String(nil)的话,实际上就不一定是返回nil了(而是调用构造器)。所以Swift送给程序员一个:类型?=初值的语法好让程序员们将初值赋为nil并仍保证自身是静态类型。


这个问题这样问说明没理解“可选型”——这不是“?=”赋值,而是定义变量为 String? 类型,这个类型在没有任何值的时候是nil;而在有值的时候会被表示成 some:"xxxx" 这样。
当你需要操作这个 String? 型变量的时候,你需要用 ! 把它转成 String 类型,这时候它的值就是"xxxx"了


Option?是用于这个变量可能为nil的情况下的

【热门文章】
【热门文章】