Object-C--->Swift之(一)可选类型
2016-01-13 21:41
465 查看
可选和nil的恋情
[code] 先看一个例子吧! let str="hello world" let num:Int=Int(str)
这两行代码的意思str字符串转换成Int类型,嘿嘿!这不是坑计算机吗?hello world能转换成Int类型的数字吗?很显然不能,而且我们运行都不会通过的!
可是我们把第二行代码换成
[code] let num:Int?= Int(str)
编译就通过了!就这样可选类型就呼之欲出!
定义:
在任何类型后面紧跟一个?就可以代表可选类型,可选类型的变量可用于处理“值缺失”的情况。Int类型的变量或常量只能接受Int类型的数据,而Int?可以接受值缺失的状况,也就是能接受值为nil。
[code] var age:Int=nil 这个显然是错误的 var age:Int?=nil 这个是可以的
注意:Int?和Int类型并不是相同的类型,程序不能直接把Int?类型的变量或者常量直接拿来当Int类型的变量或常量使用。
强制解析
为了获取可选类型的常量或变量的实际存储值需要用在后面加!进行解析。这个!的含义是:已经知道该可选变量有值了(要是实际里面没有值系统就会崩溃),提取里面的值。这种添加感叹号进行解析的用法叫做强制解析。[code] 例如: let str1:String?="hello" let str2:String?=" word" let result = str1! + str2! print(result)
之前说了使用!的前提是可选变量确实有值了,否则就会崩溃,所以我们需要提前判断可选类型是否有值。所以上面的代码这样写才正规一些:
[code] let str1:String?="hello" let str2:String?=" word" if str1 != nil && str2 != nil { let result = str1! + str2! print(result) } else { print("str1或者str2为nil,不能强制解析") } }
隐式可选类型
除了在任意已有类型后面添加?来表示可选类型外,可以加!来表示可选类型。其中Int?和Int! 类型的区别在于:当用Int?表示可选类型的时候必须用!后缀强制解析,而程序用!类型表示可选变量时,无需在后面增添!后缀执行强制解析。Swift会自动执行隐式解析。
[code] let str1:String!="hello" let str2:String!=" word" if str1 != nil && str2 != nil { let result = str1 + str2 print(result) } else { print("str1或者str2为nil,不能强制解析") }
最后用一个表清晰展示下可选类型的差异吧!
Int | Int? | Int! |
---|---|---|
是否可存储整数 | 是 | 是 |
是否接受nil | 否 | 是 |
是否需要强制解析为Int | 否 | 是 |
相关文章推荐
- 014: class and objects > 多态
- 无法解析的外部符号 "public: __thiscall BasePlugin::BasePlugin(class QObject *)"
- Objective-C Runtime
- Object-C--->Swift之(一)元组(tuple)类型
- objc_getAssociatedObject, objc_setAssociatedObject
- 【Objective-C学习记录】第四十二天
- Objective-C Runtime
- java语言中Object转为String的几种形式
- javascript Object.extend的用法
- 调用系统的相机和相册
- 计算文本和图片的高度
- Object的属性property详细解释(自动生成成员变量)
- 九宫格的算法
- 计算文本高度
- objective-C 关于找到控件处在tableviewcell上哪个cell
- Objective-C面试题
- Objective-C 关于找到所在的视图控制器
- Objective-c编程语言规范
- objc_setAssociatedObject 关联的简单用法
- java中Object... 的用法是什么意思?