立即同一片段,主要讲Swift中创新之可选型(optionals)
一、概要
唯独选型是Swift创新的一样种植新的项目,首先看一下不过选型的行使场景:
var errorCode : Int = 404
这时候候errorCode的值是404,表示这时的错误状态码是404,当有同样栽错误的下便见面博得该相应的errorCode,
而是倘若无不当那应该怎么惩罚也?
在C/C++和Java中我们见面让errorCode赋值为0或者是null(其实null也就是是0),但是我们怎么能保证0不是一模一样栽错误的状态码呢?
Swift为了缓解当时无异于问题,提供了可是选型(optionals)当这个价未在的时,我们用nil表示,
亟待小心的凡:
var errorCode : Int = 404
errorCode = nil
随即是错的,因为nil是平等栽特别的种,是无得以赋值给int型的变量的。
没错的操作是:
var errorCode : Int? = 404
errorCode = nil
添加一个?就对了,这时候Int?表示的是整型的可选型
亟待小心的是,可选型不可以赋值给不可选型的变量。
次、可选型的解包
在利用可选型的时,需要展开解包操作,有零星种植解包(unwrap)方式:
1)强制解包
var errorCode : Int? = 404
print(“The errorCode is”+errorCode!)
这种解包方式要开发者保证errorCode的价值未是nil,否则即会见报错。
2)if-let解包
var errorCode : Int? = 404
if let errorCode = errorCode {
print(“The errorCode is”+errorCode)
}
建议采用这种方式,当起多只量需要解包的时:
if let errorCode = errorCode,
errorMessage = errorMessage{
}
三、optional Chaining
先行看应用环境:
var errorMessage : String? = “Not Found”
if let errorMessage = errorMessage{
errorMessage.uppercaseString
}
这种方式是拂的,因为errorMessage是String而非是String?
假设如使String的uppercaseString方法的言语可以这么做:
errorMessage?.uppercaseString
或者
errorMessage!.uppercaseString(确定无是nil)
这边的回来路为是一个不过选型
万一errorMessage!.uppercaseString返回,再进行操作就象是一长条chain。
四、nil coalesce
俺们建议以宣称变量的时光就是为变量赋初值,但奇迹,我们意在由此后的逻辑判断之后再行对变量进行赋值
这时我们可以这样做:
var errorMessage : String? = nil
let message = errorMessage == nil ? “Not Found” : errorMessage
当可以经nil coalesce方式
var errorMessage : String? = nil
let message = errorMessage??“Not Found”
五、元组的可选型
var error1 : (errorCode : Int?, errorMessage : String?) =
(404, “Not Found”)
里面errorCode和errorMessage是不过选型,但是error1不是可选型
因此errorCode和errorMessage可以是nil,而error1不可以
var error1 : (errorCode : Int?, errorMessage : String?)? =
(404, “Not Found”)
errorCode和errorMessage,error1就还是不过选型了
六、隐式可选型
重在行使在函数的构造函数中
var errorMessage : String! = nil
!进行动的早晚可以无进行解包操作,但是得管无呢nil
当利用的下,构造函数可以如此定义,但是于后头会预先赋值,再下。