关于元组,可选类型,强制解析,断言等等.....
Swift 学习 第一天(本来准备上传到自己搭建的博客,结果一个hexo d 命令下去,直接全部清空了...心塞,不想再搞了,直接发简书)
元组(tuples)
swift 相对于OC 新增的内容
可以把元组看成一个数组类型,OC 中数组里只能存放相同类型的对象;元组和它的区别是可以添加任意数量的,任意不同类型的对象.
基本写法如下
let http404Error = (404, "Not Found")
// http404Error 的类型是 (Int, String),值是 (404, "Not Found")
但是我更喜欢这种写法
let http404Error = (statusCode:404,statusMessage: "Not Found");
在定义的同时给每个元素命名,可阅读性增强,在也便于使用时的拆分;
取元组中的元素有两种方式
- 对比OC数组下标来理解
http404Error.0
- 如果你命名了元素, 你可以通过
http404Error.statusCode
来取值,这样更容易理解
可选类型(optionals)
又一个不同之处
对于一个可选类型来说,它可以有值,也可以没值,这就是可选这个名称的由来
在OC中,将一个字符串转化为一个integer类型(前提是能转,不能转,运行会报错),这也是很常见的需求
例如 NSString *text = @"123";
将text转化为NSInteger 可以用这个方法[text integerValue];
在swift中String转化为Int,这样写
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
// convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int"
在possibleNumber是由纯数字组成的字符串时;swift可以很正常的转换,但是如果不是,那么,swift无法转换,这样的话,convertedNumber是没有值,也就是nil
;这就是optional xx
的意思,它可以有值,如果没有值就返回一个nil
.
可选类型的定义:
var str : String?
如果,定义时没有给值,那么系统默认值为nil
隐式解析可选类型
对于我们日常编程中,对于某一个可选变量optionalValue,我们知道它肯定有值,并且我们也要使用它的值,那么,我们可以用optionalValue!来告诉系统,我知道它有值,请使用这个值
这种用法,swift称它为强制解析
既然我们在使用它时,可以用optionalValue!
,那么如果我们在定义的时候这样写,代表什么含义?
var str : String! = "hello world"
这代表一个隐式解析可选类型;
第一次被赋值之后,可以确定一个可选类型总会有值.
隐式解析可选类型可以看做一个可以自动解析的可选类型。只要在声明的时候把感叹号放到类型的结尾,而不是每次取值的可选名字的结尾。
强制解析(forced unwrapping)
对于一个可选类型,我们清楚它有值,而且也要用它,写作optionalValue!
来取它的值,这样叫做强制解析.
断言(assertion)
主要在调试的时候使用, 给其一个条件,他会判断,这个条件是否为true,如果是,那么继续运行,如果不是,则报错;
文档中一个例子很好的说明这个:
let age = -3 assert(age >= 0, "一个人的年龄不能小于0") // 因为 age < 0,所以断言会触发
断言信息一个人的年龄不能小于0
,如果不需要,可以省略
以上是Swift学习第一天,因为之前是主要语言是OC,在学习笔记中,我会有很多处与OC的对比,来加深我的记忆,也便于自己的理解