Swift语法学习总结
看了一下swift的中文翻译,然后自己模仿敲了一个项目里的个人页面,看了一周多点的视频,老实说应该3天就学完了,自己还是学的太慢了。可能看了,敲过,但还是会很快忘记,趁着艾宾浩斯遗忘曲线还不是快忘记,赶紧总结一波然后再去敲代码比较好。
1.基本的常量let,变量var,类型class,方法func,结构体struct,枚举enum,元组()就不说了
2.I/O参数:针对交换函数所以出现,因为swift没有指针类型,所以出现了IO参数,把形参声明为可以被修改的变量类型
3.函数作为参数传递,衍射高阶函数,高阶函数有什么优势,有文章介绍
4.闭包:类似OC的Block(匿名函数)
5.array的sorted by方法作用整理数组
根据这个例子,体现闭包的强大之处优化步骤:1.省略类型2.如果闭包语句只有一句,省略return关键字3.参数名缩写,使用$0,$1代表第一个第二个。。4.运算符类型,省略参数,直接一个大于号>,最后简化为一个
6.尾随闭包
7.闭包捕获
8.结构体是值类型,类是引用类型
9.恒等运算符
(is 和 as)10.存储属性、延迟存储属性(lazy 类似与懒加载)、计算属性、类型属性
通过一个例子可以看清楚区别
懒加载例子:
计算属性:重写get,set方法
newValue、oldValue
只有get方法,是只读属性,两者都有就是可读可写类型属性:
属性观察器:willset,didset
通过newValue和oldValue看的比较清楚11.类型方法,类和结构体的不同是写成class func还是static func
12.下标方法,subscript
subsript(number:Int)-> String{
get{ return firendsArr[number] }
set(value){firendsArr[number]=value }//set{firendsArr[number]=newValue
}
13.继承和多态:
继承 继承注意点 多态说明swift的多态:我理解为重写了父类的方法,和oc不同的是oc的多态有个概念为runtime
14.Swift构造函数
构造函数的概念 几种构造器 构造器分类比如,不同oc,需要显示写构造方法,Swift往往init都是省略不写
构造器的几点说明比较特别的构造器:便捷构造器
便捷构造器使用说明 子类初始化优先顺序构造器的两段式构造过程:
构造过程成员构造器:结构体特有
成员构造器可失败构造器:允许构造失败,返回为nil
init?15.析构函数:swift是ARC管理,没有MRC,同OC一样,实例释放之前,会先调用析构函数,OC中是deallo,swift中是deinit
注意,要被赋为nil,就要求是可选类型
16.内存管理:强引用,弱引用,循环引用,无主引用
弱引用:使用weak关键字,解决循环引用
无主引用的适用情况
无主引用在不是可选类型时使用,解决循环引用问题捕获列表:闭包内对self属性的引用导致循环引用问题,和oc的weakself写法不同,swift中使用[unowned(或weak) self] in .... 多个实体的引用用逗号隔开
捕获列表使用规范17.可选链
可选链作用 使用场景就是a.b.c.d.func18.is 和 as
is、as使用场景注意:as的可选转换格式和强制转换格式的使用
19.AnyObject和Any
比如: var people =[AnyObject]()
20.swift的嵌套
结构体里不能随便修改属性的值,要改需方法前使用mutating21.swift的扩展:与OC的不同
多使用扩展后面加协议扩展属性的例子:
注意只能添加计算属性个人理解是因为,扩展产生时间和类产生时间不一样,类构建的时候又要求存储属性初始化完成,所以就是矛盾的
扩展构造器:
22.协议
协议的分类,包括optional等协议里的实行声明:不声明默认只有set属性
类类型遵循协议要使用static协议里定义突变方法
协议里定义构造方法,和类型里的声明是一样的,值得注意的是
而且子类还不用写override
协议作为一个类型,协议首字母大写,对象首字母小写
扩展中添加协议成员,使类遵守相关协议和通过扩展补充协议声明
协议组,使用多个协议
检验协议的一致性
is、as和as?的区别,is,as?都有判断作用,as是强制转换类型可选协议:
同理,对协议的实现
23.泛型
泛型的使用方法:
类型<泛型类型>(){.....} 泛型使用场景泛型和协议在一起:使用typealias定义一个数据原型
where关键字,相当于一个条件的限定
where使用场景