Swift数据类型-可选类型

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值