《Swifter Tips》 读书笔记(2)
2016-05-22 本文已影响13人
魅猫之
1.通常我们使用字面量来快速创建类型,如
let aNumber = 3
let aString = "Hello"
let aBool = true
let anArray = [1,2,3]
let aDictionary = ["key1": "value1", "key2": "value2"]
是因为这些类型实现了如下接口:
ArrayLiteralConvertible
BooleanLiteralConvertible
DictionaryLiteralConvertible
FloatLiteralConvertible
NilLiteralConvertible
IntegerLiteralConvertible
StringLiteralConvertible
2.AnyObject 可以代表任何 class 类型的实例
Any 可以表示任意类型,甚至包括方法 (func) 类型
3.typealias是用来为已经存在的类型重新定义名字的
4.swift中的可变参数与其他语言不一样,其他语言为了能让编译器知道可变参数有多少个,在哪里截断,通常可变参数都只能放在函数的最后一个参数,但是swift不存在这个问题,因为调用swift函数的时候,是要写参数名称的;但是也有限制,比如参数类型都要相同,而且函数只能有一个参数是可变的
5.在某个类的子类中,初始化方法语句的顺序并不是随意的,我们需要保证在当前子类实例的成员初始化完成后才能调用父类的初始化方法
一般来说,子类的初始化顺序是:
- 设置子类自己需要初始化的参数
- 调用父类的相应的初始化方法
- 对父类中的需要改变的成员进行设定
定义 init 方法必须遵循三条规则
指定构造器必须调用它直接父类的指定构造器方法.
便利构造器必须调用同一个类中定义的其它初始化方法.
便利构造器在最后必须调用一个指定构造器.
6.指定构造器(Designated)、便捷构造器(Convenience)、Require关键字
Swift 中不加修饰的init 方法都需要在方法中保证所有非Optional的实例变量被赋值初始化,Optional类型的变量如果不设置初始值,则默认设置为nil;
关于构造器init,参考博文 http://my.oschina.net/hejunbinlan/blog/470123#OSC_h4_5