您的位置:首页 > 移动开发 > Swift

swift学习要点摘要11-18

2014-10-09 10:52 204 查看
11.方法

方法的局部参数名称和外部参数名称:

func incrementBy(amount: Int, numberOfTimes: Int){}  => counter.incrementBy(5, numberOfTimes: 3)

Swift 默认仅给方法的第一个参数名称一个局部参数名称;默认同时给第二个和后续的参数名称局部参数名称和外部参数名称。

在实例方法中修改值类型:方法定义时加上mutating关键字,这让方法可以修改值类型的属性。

mutating func moveByX(deltaX: Double, y deltaY: Double) {}

声明类的类型方法,在方法的func关键字之前加上关键字class,声明结构体和枚举的类型方法,在方法的func关键字之前加上关键字static。

12.附属脚本

字典利用附属脚本存取值:var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]; numberOfLegs["bird"] = 2

13.继承

属性观察器:可以为类中继承来的属性添加属性观察器,当属性值改变时,累就会被通知到。

重写:子类可以为继承来的实例方法,类方法,实例属性,类属性,附属脚本提供自己定制的实现,在重新定义的前面加上override关键字。

防止重写:通过把方法,属性或附属脚本标记为final来防止被重写。@final var, @final func, @final class func, @final subscript。

14.构造过程

当你为存储型属性设置默认值或者在构造器中为其赋值时,它们的值是被直接设置的,不会触发任何属性观测器。

指定构造器:是类中最主要的构造器,将初始化类中提供的所有属性,并调用父类的构造器来实现父类的初始化。

init(parameters) { statements } 

便利构造器:是类中比较次要的,辅助性的构造器。

convenience init(parameters) { statements }

与方法,属性和下标不同,在重载构造器时没有必要使用关键字override。

15.反初始化

反初始化函数:反初始化函数不带任何参数,在写法上不带括号:deinit { //执行反初始化 }

16.自动引用计数

强引用:只用将一个类的实例赋值给一个属性或者常量或者变量,这个属性或常量或变量就是这个实例的强引用。只要强引用还存在,就不能销毁实例。

var reference1: Person?; reference1 = Person(name: "John Appleseed"); reference2 = reference1

强引用环:在两个类实例彼此保持对方的强 引用,使得每个实例都使对方有效时会发生这种情况。

弱引用:弱引用不会增加实例的引用计数,因此不会阻止ARC销毁被引用的实例。strong / weak

因为弱引用可以没有值,所以弱引用必须声明为可选类型的。即使弱引用存在,ARC也有可能会销毁实例,并将弱引用赋值为nil。

无主引用:在实例的生命周期中引用会变为nil的实例用弱引用。如果整个生命周期内引用都有值,则用无主引用,只能声明为非可选类型。unowned

非可选类型不能赋值为nil,因此当实例被销毁的时候,ARC无法将引用赋值为nil。当实例被销毁后,试图访问该实例的无主引用会触发运行时错误。

Person和Apartment的例子说明的场景:两个属性的值都可能是nil,并有可能产生强引用环。适合使用弱引用。

Customer和CreditCard的例子说明的场景:一个属性可以是nil,另外一个属性不允许是nil,并有可能产生强引用环。适合使用无主引用。

第三种场景:两个属性都必须有值,且初始化完成后不能为nil。适合一个类用无主应用属性,另外一个类用隐式展开的可选属性。

17.自判断链接

自判断链接:是一种可以请求和调用属性,方法及子脚本的过程。

18.类型转换

类型检查操作符(is):检查一个实例是否属于特定子类型。if item is Movie { }

类型转换操作符(as):可选形式(as?):总是返回一个可选值(转换成功值或nil)。强制形式(as):转换失败时会触发runtime error。

AnyObject:可以代表任何class类型的实例。Any:可以表示任何类型,除了方法类型(function types)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  swift