December 2018
Intermediate to advanced
414 pages
10h 19m
English
We'll implement Observable as a generic class, as it should be able to wrap any kind of object:
class Observable<Type> { typealias Observer = (Type) -> () typealias Token = NSObjectProtocol private var observers = [(Token, Observer)]() var value: Type { didSet { notify() } } init(_ value: Type) { self.value = value } @discardableResult func bind(_ observer: @escaping Observer) -> Token { defer { observer(value) } let obj = NSObject() observers.append((obj, observer)) return obj } func unbind(_ token: Token) { observers.removeAll { $0.0.isEqual(token) } } private func notify() { observers.forEach { (_, observer) in observer(value) } }}
We can demonstrate the capabilities of this Observer<Type> object through ...
Read now
Unlock full access