swift学习-扩展,协议-1/3(第三周)

昨天和今天的合到一起了。
这两天学习的时间都不多,合起来大概有2个来小时。到目前为止,本周设置的目标都已完成,原定的200页也已看到,还剩下最后的一个本周回顾,等今天晚上到北京了做吧。
昨天下了沙丘2000和帝国时代,算是怀了一把旧。以前觉得玩一年也玩不腻的游戏,现在玩两局也就差不多了。经历的太多了,美好的回忆也只能是回忆了。
明天又要上班了,下周的目标是看到300页,基本上算是要把这本书全看完了,加油吧。
这两天的笔记如下:

1 扩展方法
例如:

extension Int {
    func repetitions(task task: () -> ()) {
        for _ in 0..

通过扩展添加的实例方法也可以修改实例本身,结构体和枚举中修改self或其属性的方法必须声明为mutating

extension Int {
    mutating func square() {
        self *= self
    }
}
var myInt = 3

myInt.square() //3.squre()会错误

可以向一个已有类型添加新的下标。

extension Int {
    subscript(index: Int) -> Int {
        return self/Int(pow(10.0, Double(index)))%10
    }
}

print(123456[2])

2 协议,用于定义完成某项功能或任务所必须的方法和属性。协议并不提供实现,只用来描述这些实现应该是什么样的。协议可以要求其遵循者提供特定的实例属性,实例方法,类方法,操作符或下标等。类似于java中的接口概念。但是多了属性实现。
如果一个类在继承父类的同时也采用了协议,应当把父类放在所有的协议之前。
协议可以规定其遵循者提供特定名称与类型的实例属性或类属性,而不管其是存储性属性还是计算性属性。此外也可以指定属性是只读的还是可读写的。
例如:

protocol SomeProtocol {
    var setGet: Int { get set }
    var onlyGet: Int { get }
}

protocol AnotherProtocol {
    static var classProperty: Int {get set} //static表示该属性为类属性
}

protocol FullyNamed {
    var fullName: String {get}
}

struct Persion: FullyNamed {
    var fullName: String  //使用存储属性实现协议
}

class Starship: FullyNamed {
    var fullName: String {
        return "use compute to impletion" //使用计算属性实现协议
    }
}

3 协议方法

protocol RandomGenerator {
    func random() -> Double
}

class LinearGenerator: RandomGenerator {
    var lastRandom = 42.0
    let m = 1234.0
    let a = 1233.0
    let c = 2345.0
    
    func random() -> Double {
        lastRandom = (lastRandom * a + c) % m       
        return lastRandom / m
    }
}

var random: RandomGenerator = LinearGenerator()

有时不得不在方法中更改属性的值,在基于值类型的(结构体,枚举)中,使用mutating关键字作为函数前缀。在协议方法中,也是一样。
4 协议构造器。
协议可以要求遵循它的方法实现特定的构造器。在遵循该协议的类中实现构造器,并指定其为类的指定构造器或便捷构造器,但必须给构造器前加上required修饰符。
使用required修饰符可以保证:所有遵循该协议的子类,同样能为构造器提供一个显式的实现或继承实现。
5 委托(代理)模式
委托允许类,或结构体将一些需要它们负责的功能交给其他的类型的实例。基本和设计模式中的代理模式相同,就不赘述了。

一会8点50的火车,又要回到帝都的怀抱了。
希望2016一切顺利吧,和晶晶童鞋美满幸福。

第3周总结:
火车10点15到的,到家刚好11点半。
本周的学习时间,应该在9小时左右,考虑到这周有一天休息,而且设定的200页阅读计划都完成,所以也算完成预期了。
刚才回顾了一下本周的内容,感觉还是挺多的,而且相比上两周的内容,明显要复杂不少,概念很多,还是需要以后在实践中慢慢熟悉加理解了。
第四周正式开始,想了一下,还是不设定300页的目标了。顺其自然,不求快,但求理解和深入。保证每周的10小时,日积月累,终将拨云见日。
回到自己的屋还是要舒服不少,冬天,就该冷冷的嘛。

你可能感兴趣的:(swift学习-扩展,协议-1/3(第三周))