Swift语法学习总结

2017-02-24  本文已影响27人  Johnny_Chang

看了一下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.func

18.is 和 as

is、as使用场景

注意:as的可选转换格式和强制转换格式的使用

19.AnyObject和Any

比如: var people =[AnyObject]()

20.swift的嵌套

结构体里不能随便修改属性的值,要改需方法前使用mutating

21.swift的扩展:与OC的不同

多使用扩展后面加协议

扩展属性的例子:

注意只能添加计算属性

个人理解是因为,扩展产生时间和类产生时间不一样,类构建的时候又要求存储属性初始化完成,所以就是矛盾的

扩展构造器:

22.协议

协议的分类,包括optional等

协议里的实行声明:不声明默认只有set属性

类类型遵循协议要使用static

协议里定义突变方法

协议里定义构造方法,和类型里的声明是一样的,值得注意的是

而且子类还不用写override

协议作为一个类型,协议首字母大写,对象首字母小写

扩展中添加协议成员,使类遵守相关协议和通过扩展补充协议声明

协议组,使用多个协议

检验协议的一致性

is、as和as?的区别,is,as?都有判断作用,as是强制转换类型

可选协议:

同理,对协议的实现

23.泛型

泛型的使用方法:

类型<泛型类型>(){.....} 泛型使用场景

泛型和协议在一起:使用typealias定义一个数据原型

where关键字,相当于一个条件的限定

where使用场景
上一篇下一篇

猜你喜欢

热点阅读