上一篇中,回顾了一到八节的内容,以及主要的知识点。本次学习做的不太好的一点就是没有及时的回顾,总是在不停的学习新知识,以至于前面的知识遗忘的比较多。现在回顾有一点亡羊补牢的感觉。
9.循环语句
swift的循环语句与OC语言也类似,像for-in循环,while循环都和OC一样。但是swift中没有了for(;;){} 循环,是不是很意外啊?遍历数组啊,字典啊常用的是 for - in循环。for - in可以直接取到元素,而且效率也比较高。swift中还新增了 repeat-while循环,跟之前的 do-while循环类似。顺便提一下,swift中还有一种快速创建数组的方式:
let array = repeatElement(0, count: 10)
创建十个元素0 . 也算是一种循环吧。
回顾链接:https://www.jianshu.com/p/634f095f2dc3
10.Optional,可选类型 ?
swift中的一种全新的类型,别的语言中好像没有这种概念。可选的字面意思就是可以有值,也可以没有值。那么我们在使用的时候就需要明确的知道有没有值,这时候就会需要解包,也就是把可选类型变成确定的类型。这个知识点就需要多多使用才能体会可选类型的安全性。
回顾链接:https://www.jianshu.com/p/7a69c5806a53
11. 函数
函数是引用类型。函数也是比较常用,如果想要复杂起来也能复杂到难以读懂的一种类型。每种语言都有函数,函数常常作为一个个的功能模块,像高楼的每一块砖一样,层层堆砌,运用合理,才使得建筑成群,项目成立。swift的函数结构如下:
func 函数名(参数1,参数2,...) -> 返回值 {
函数体
}
跟别的语言一样,有函数名,参数列表,返回值,以及函数执行体。
注意: swift和C语言一样,支持不定参数的函数。
函数参数中的输入输出参数(inout)。
swift还支持函数的嵌套。
回顾链接:https://www.jianshu.com/p/65258455386d
12.闭包
闭包也是swift中比较难理解的内容之一。也是很重要的内容,常常使用的内容。在swift中,一个闭包又称为“闭包表达式”。
基本语法形式:
_ = { (参数1: 参数类型, 参数2: 参数类型....) -> 返回值类型 in
闭包执行代码
}
注意: 闭包与类型推导一起使用的时候,常常可以省略参数类型。
//完整有参数,有返回值的闭包
let c = { (a: Int, b: Int) -> Int in
print("求两个整数的和")
return a + b
}
let sum = c(100, 200)
print("sum = \(sum)")
// 省略参数,省略返回值,省略return, 省略 in 的闭包
let d: (Int, Int) -> Int = {
$0 + $1
}
let sum2 = d(1,2)
print("sum2 = \(sum2)")
闭包还有尾随闭包,逃逸闭包,自动闭包等。
回顾链接:https://www.jianshu.com/p/12ab2cfbc0bb
13. 枚举 enum
swift中的枚举很强大,有类一样的特性,可以声明属性和方法,但是它是值类型。枚举还可以指定类型,还有关联值。
// 关联值
enum MyEnum {
case value1(Void)
case value2(Int)
case value3(Float, Int, String)
case value4
}
let e1 = MyEnum.value1(())
let e2 = MyEnum.value2(10)
let e3 = MyEnum.value3(1.2, 200, "你好")
func test(en: MyEnum) {
switch en {
case .value1(let v):
print("关联值为空")
case .value2(let v):
print("关联值是:v = \(v)")
case .value3(let v1, let v2, let v3):
print("多个关联值: v1 = \(v1), v2 = \(v2), v3 = \(v3)")
case .value4:
print("无关联值")
}
}
test(en: e2)
这里也用到了 值绑定。
回顾链接:https://www.jianshu.com/p/a265cabd12b6
14.结构体 struct
我们前面说过,swift中的Int, Float,String,Array等都是结构体类型。struct也是值类型,但是它也是可以定义属性以及方法的。swift中使用结构体的情形是非常非常多的。定义数据模型用的也是结构体。
swift中的结构体还有很多灵活的语法特性:
可定义存储式实例与类型属性;
可定义计算式实例与类型属性;
可使用属性观察者;
可定义实例与类型方法;
可定义初始化器;
可定义数组下标;
可对结构体进行扩展;
可遵循协议。
是不是很灵活呢?能用结构体的时候,我们就不使用类。也是从安全性以及效率的角度考虑的。
回顾链接:https://www.jianshu.com/p/a4bd059c1b10
回顾链接2:https://www.jianshu.com/p/3df9ea9ad63d
15.协议 protocol
swift中,协议也是很重要的一部分内容,比如声明某个类型,需要遵循某些协议才能实现某种方法。swift中,枚举、类以及结构体类型都可以遵循协议。swift中协议也是可以继承的。协议也可以声明成只针对于类类型的。
回顾链接:https://www.jianshu.com/p/8f3c0f33010f
16.类 class
因为swift也是面向对象的语言,自然少不了类了。类是引用类型,也是在项目中经常使用的类型。如果说一个函数就是一个建设大厦的砖头,那么类就像是一个个的部件,像窗户啊,墙啊,钢筋啊,水泥啊,甚至设计图啊,都可以称之为类。前面我们说过,结构体和类很像,结构体具有八大特性,那么类也是具有这八大特性的,而且除了这八大特性,还有四大特性:
1.继承:允许一个类继承另一个类的特征。
2.类型投射:允许在运行时检查并解释一个类的对象实例的类型。
3.析构器:允许一个类的对象实例释放它所分配的任一资源。
4.引用计数:允许对一个类的对象实例有多个引用。
回顾链接:https://www.jianshu.com/p/cb91d4106d18
回顾链接2:https://www.jianshu.com/p/dc2a21e11593
回顾链接3:https://www.jianshu.com/p/bb231442555c