Swift基础语法简介(三)——可选项

  可以利用可选项来处理值可能缺失的情况。可选项意味着:这里有一个值,它等于X或者这里根本没有值。

  在C和Objective-C中,没有可选项的概念。在Objective-C中有一个近似的特性,一个方法可以返回一个对象或者返回nil。nil的意思是“缺少一个可用对象”。然而,他只能用在对象上,却不能作用在结构体,基础的C类型和枚举值上。对于这些类型,Objective-C会返回一个特殊的值(例如NSNotFound)来表示值的缺失。这种方法是建立在假设调用者知道这个特殊的值并记得去检查他。然而,Swift中的可选项就可以让你知道任何类型的值的缺失,他并不需要一个特殊的值。

  你可以通过给可选变量赋值一个nil来将之设置为没有值:

var serverResponseCode: Int? = 404

// serverResponseCode contains an actualInt value of 404

serverResponseCode = nil

// serverResponseCode now contains no value

  nil不能用于非可选的常量或者变量,如果你的代码中常量或变量需要作用于特定条件下的值缺失,可以给它声明为相应类型的可选项。

如果你定义的可选变量没有提供一个默认值,变量会被自动设置成nil。

var surveyAnswer: String?

// surveyAnswer is automatically set to nil

 Swift中的nil和Objective-C中的nil不同,在Objective-C中nil是一个指向不存在对象的指针。在Swift中,nil不是指针它是值缺失的一种特殊类型,任何类型的可选项都可以设置成nil而不仅仅是对象指针。

1、强制展开

if helloMessage != nil {

print("convertedNumberhas an integer value of \( helloMessage!).")

}

一旦确定可选变值中包含值,你可以在可选的名字后面加一个感叹号(!)来获取值,感叹号的意思就是说“我知道这个可选项里面有值,展开吧”。这就是所谓的可选值的强制展开。使用! 来获取一个不存在的可选值会导致运行错误,在使用!强制展开之前必须确保可选项中包含一个非nil 的值。

2、可选项绑定

  可以使用可选项绑定来判断可选项是否包含值,如果包含就把值付给一个临时的常量或者变量。可选绑定可以与if和while的语句使用来检查可选项内部的值,并赋值给一个常量或者变量。

if let constantName = someOptional{

print("constantName is\(constantName)")   // constantName只能在if语句内用

}

  你可以在同一个if语句中包含多可选项绑定,用逗号分割即可。如果任一可选绑定结果是nil或者布尔值为false,那么整个if判断会被看做false。

if let firstNumber = Int("4"), letsecondNumber = Int("42"), firstNumber < secondNumber && secondNumber< 100 {

print("\(firstNumber)< \(secondNumber) < 100")

}

3、隐式展开可选项

  通过在声明的类型后边添加一个叹号(String!)而非问号(String?)来书写隐式展开可选项。

let possibleString: String? = "Anoptional string."

let forcedString: String = possibleString! //requires an exclamation mark

let assumedString: String! = "Animplicitly unwrapped optional string."

let implicitString: String = assumedString //no need for an exclamation mark

  隐式展开可选项其实就是在每次访问该值的时候赋予了自动展开的权限(即自动执行了感叹号的功能(!))。你可以在声明可选项的时候添加一个叹号而不是每次调用的时候再可选项后添加叹号。当然,前提是该可选值有值。隐式展开可选项主要被用在Swift类的初始化过程中(初始化的时候被赋值,之后会一直保持有值的状态)。

你可能感兴趣的:(Swift基础语法简介(三)——可选项)