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
- Swift数据类型-可选类型
- Swift - 可选类型
- Swift-可选类型和可选链
- Swift之可选数据类型
- Swift语法精炼(1)-基础数据类型,元组,可选类型
- Swift学习05-optional可选类型
- swift语言-可选类型
- Swift:可选类型(Optional)
- Swift-Optional(可选类型?!)
- swift 之可选类型
- swift之可选类型
- Swift 可选类型 ?和!
- Swift 可选类型
- swift可选类型
- Swift笔记:可选类型
- Swift-可选类型
- swift可选类型
- swift-可选类型
- 程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦
- js实现用户输入的小写字母自动转大写字母
- svn本地资源异常
- 41. PHP MySQL 连接数据库
- C++ string::push_back
- Swift数据类型-可选类型
- 虚拟机VMware Workstation 提示cannot connect to the virtual machine.
- nginx配置proxy_pass代理转发
- Jquery 全选/反选
- 华为机试——输出指定字段
- 我的博客,开始启程(改变始于意识)
- 进程线程及堆栈关系的总结
- WatchOS 2.0分析
- 列出rpm包内容和解压rpm包内容 http://www.51testing.com/html/57/28557-205195.html