收藏家-Swift学习程序员iOS Developer

[Swift Tips 读书笔记]从 Objective-C 到

2017-06-08  本文已影响125人  RubyAhooo
  1. KVO
  1. 局部 scope
  2. 判等
  3. 哈希
  4. 类簇
  5. 调⽤ C 动态库

--

KVO

class CarFather: NSObject {
    var brand : String?
}

class Car: CarFather {
dynamic override var brand: String? {
    get { return super.brand }
    set { super.brand = newValue }
  }
}

--

局部 scope

    do {
        //局部代码块
    }
    
    //局部代码块
    self.titleLabel = { () -> UILabel in
        let label = UILabel.init(frame: CGRect.init(x: 100, y: 100, width: 80, height: 80))
        label.text = "哈哈哈哈"
        self.view.addSubview(label)
        return label
    }()

--

判等

swift中两个字符串是否相同,使用==判等

OC中==是判断两个对象是否指向同一个内存地址。

swift中==是一个操作符的声明

swift中判断两个引用是否指向同一个内存地址使用===

--

哈希

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表 -------- 摘自百度百科

除⾮我们正在开发⼀个哈希散列的数据结构,否则我们不应该直接依赖系统所实现的哈希值来做其他操作。⾸先哈希的定义是单向的,对于相等的对象或值,我们可以期待它们拥有相同的哈希,但是反过来并不⼀定成⽴。其次,某些对象的哈希值有可能随着系统环境或者时间的变化⽽改变。因此你也不应该依赖于哈希值来构建⼀些需要确定对象唯⼀性的功能,在绝⼤部分情况下,你将会得到错误的结果。

--

类簇

类簇(class cluster)是Cocoa框架中广泛使用的设计模式之一。使用一个统一的公共的类来定制单一的接口。好处是避免公开很多的子类造成混乱。比方说NSNumber,可以通过initWithInt initWithFloat initWithBool生成,实际上它们可能是不同的私有子类对象。

类簇在子类种类繁多,行为相对统一的时候对于简化接口很有帮助。

swift中,初始化的时候我们只能得到当前类的实例,并且要完成所有的配置。就是说,对于一个公共类来说,是不可能在初始化方法中返回其子类的信息。类簇的实现相对于OC来说就麻烦些了,一个有效的方式是通过工厂方法实现类簇。

class Car: NSObject {

var desc: String? {
    return "车的调性"
}
class func descCar(brand: String!) -> Car? {
    var car: Car?
    switch brand {
    case "BMW":
        car = BMW()
    case "BYD":
        car = BYD()
    default:
        car = Car()
    }
    
    return car
  }  
}

class BYD: Car {
override var desc: String? {
    return "Cheap"
  }
}

class BMW: Car {
override var desc: String? {
    return "Sport"
  }
}

--

调⽤ C 动态库

OC是C的超集,但是swift中不能直接使用C的库或者代码,最好的方法是通过{product-modulename}-Bridging-Header.h调用OC,从而调用C。

上一篇 下一篇

猜你喜欢

热点阅读