Swift数据类型-可选类型

来源:互联网 发布:计算圆周率算法 编辑:程序博客网 时间:2024/06/05 17:41

Optionals

在任何已有类型的后面紧跟?即刻代表可选类型,可选了行的变量可用于处理“值缺失”的情况。

可选和nil

var str="fkit"

var num:Int? = str.toInt()

Int?就是可选类型,由于str是String类型的变量,当程序试图把String转换成Int时,有可能转换成功有可能转换失败。转换失败时,就无法成功返回Int值,这就是“值缺失”的情况因此必须使用Int?类型的变量来存储转换结果

对于可能发生“值缺失”的情况,编译器会自动推断该变量的类型为可选类型。例如

var n = str.toInt()

注意:Swift的nil与Objective-C中的nil完全不同,在Objective-C中,nil代表一个并不存在的对象的指针;而在Swift中,nil并不代表指针----它是一个确定的值,用于代表“值缺失”。任何可选类型的变量都可以被赋值为nil。只有可选类型的变量或敞亮才能接受nil,非可选类型的变量和敞亮不能接受nil。C和Objective-C中没有可选类型的概念

强制解析

Int?类型与Int类型并不是相同的类型,程序不能将Int?类型的变量当成Int类型的变量或常量使用。为了获取可选类型的变量或常量实际存储的值,可在变量或常量后添加英文感叹号(!)进行解析,。可选这个感叹号表明:已知该可选变量有值,请提取其中的值。例:

var str:String? = "Hello "

var s:String = str!

可选绑定

可选绑定用于判断可选类型的变量或常量是否有值,如果可选类型的变量或常量有值就赋给另一个临时的变量或常量。可选绑定可用在if分支货while循环中对可选类型的值进行判断,并将值付给变量或常量。例:

var str:String! = "sss"

if var temp = str

{

println("str 的值为:\(str)")

}else{

println("str 的值为nil不能解析")

}

上面的例子直接可以用temp进行访问,不用将str强制转换

隐式可选类型

Swift还允许在任意已有类型后面添加!来表示可选类型。比如Int类型的变量或常量只能接受Int型的值,不能接受nil值;Int?类型的变量或常量既能接受Int型的值,也可以接受nil值,而Int!类型的变量或常量既能接受Int型的值,也可以接受nil值。Int?和Int!的区别是:当程序需要获取Int?类型的变量或常量的值时,程序必须在变量名后添加!后缀执行强制解析;但当程序需要获取Int!类型的变量或常量的值时,无需在变量后添加!后缀执行强制解析,Swift会自动执行隐式解析。需要指出的是,在隐式可选类型的变量或常量没有值的情况下,如果程序尝试获取该变量或常量的值,同样会导致运行时错误,这和在没有值的普通可选类型的变量名后添加!所导致的错误完全一样。

Swift同样运行先判断隐式可选类型的变量或常量不为nil,然后才去获取隐式可选类型的变量或常量的值。Swift也允许使用可选绑定来解析隐式可选类型的变量或常量的值。需要说明的是,隐式可选类型主要用于定义哪些被赋值之后不会重新变为nil的变量。如果一个变量在其生产期间可能重新变为nil,那么应该使用普通可选类型来定义该变量。


类型别名

Swift提供了typealias来定义类型别名。typealias语句的语法格式为:

typealias 类型别名 = 已有类型

比如可以使用如下语句给UInt16另起一个名字:

typealias Counter = UInt16

通过上面语句就为UInt16类型起了一个新名称:Counter,接下来就可以通过如下语句使用Counter来定义变量了:

var i,j:Counter

var max = Counter.max

0 0
原创粉丝点击