Swift语言中以及C/C++和Java不同的语法(二)

立即同一片段,主要讲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

当利用的下,构造函数可以如此定义,但是于后头会预先赋值,再下。