swift可选型


Swift中,可选类型其根源是一个枚举型,里面有None和Some两种类型。其实所谓的nil就是Optional.None, 非nil就是Optional.Some, 然后会通过Some(T)包装(wrap)原始值,这也是为什么在使用Optional的时候要拆包(从enum里取出来原始值)的原因, 也是PlayGround会把Optional值显示为类似{Some "hello world"}的原因

可选型不能直接使用,我们要使用可选型就需要Unwrap:解包
我们可以直接强制解包,“the errorcode is" + errorcode! 加上 !
如上面的强制解包是有风险的。
可选型表示变量里面是有可能为空的,我们要做非空判断,
if let unwarpederrorcode = errorcode{

}
上面是常规的解包方法 ,当然也可以使用if var 解包,但不鼓励;
if let errorcode = errorcode, errormessage = errormessage where errorcode =="404"{
}
这是对多个可选型解包的方法,后面加上where判断,确保解包后的结果是我们所想得到的

下面介绍两个可选型操作:
1、optional chaining 链条
errormessage?.uppercasestring
2、nil-coalesce
let message2 =errormessage == null?"no error":errormessage
可使用三目运算符的写法,当然还有另一种写法
let message3 = errormessage ?? "no error"
message3想取errormessage的值,但取不到就用后面的
可选型在元组中的使用
声明一个元组
var error1 :(errorcode: Int ,errorMessage: String?) =(404,"not found")
error.errorMessage = nil
但我们不能把nil赋值给非可选型
可选型的实际应用
var ageInput :String ="xyz"
设置新的类型 var age =Int( ageInput) 这里的age返回的是nil
age的类型是可选型的age,因为xyz 不能转成 Int

var greeting ="Hellot"
greeting.rangOfString("ll")返回 2..<4前闭后开的范围
greeting.rangOfString("oo") 返回nil ,这时候的greetings是可选型
合理的使用可选型能避免空指针报错
隐式可选型
var erorMessage :String! =null
但这种隐式可选型存在风险,在我们创建一个函数时候,可以使用隐式可选型,使其可以为nil,在运算中给其赋值。

NULL是一个通用指针
var age: Int = 35var height:Int = 180
上面定义了两个变量,都是Int型,数值分别为35180,但是不能给这两个变量赋值nil。这样就需要可选型了(Optional)。
可选型其实是枚举类型(enum)

nil是一个对象值,如果要把一个对象设置为空的时候就用nil。
Nil是一个类对象的值,如果要把一个Class类型的对象设置为空的时候就用Nil。
在下面的代码中声明了两个可选型变量。?表示是一个可选型
var age:Int? = nilvar height:Int? = 180
以height为例:与下面的代码是等效的。
var height:Optional<Int> = Optional <Int>(180)



本文作为学习笔记,记录和分享学习的历程


NULL是一个通用指针
var age: Int = 35var height:Int = 180
上面定义了两个变量,都是Int型,数值分别为35180,但是不能给这两个变量赋值nil。这样就需要可选型了(Optional)。
可选型其实是枚举类型(enum)

nil是一个对象值,如果要把一个对象设置为空的时候就用nil。
Nil是一个类对象的值,如果要把一个Class类型的对象设置为空的时候就用Nil。
在下面的代码中声明了两个可选型变量。?表示是一个可选型
var age:Int? = nilvar height:Int? = 180
以height为例:与下面的代码是等效的。
var height:Optional<Int> = Optional <Int>(180)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章