Swift,有没有可能让 ReactiveCocoa 为协议工作
Swift, Was it possible make ReactiveCocoa work for protocol
我觉得如果代码是接口驱动就好了
那么如何让 ReactiveCocoa 为 swift 中的协议工作呢?
例如
protocol SomeBody {
var name: String { get set }
}
...
class XXViewController {
@IBOutlet weak var someLabel:UILabel!
var someOne: SomeBody {
didSet {
RACObserve(someOne, "name").subscribeNext { [weak self](name) -> Void in
self?.someLabel.text = name as! String
}
}
}
....
}
RACObserve
建立在 KVO 之上,因此要使其工作 name
需要键值可观察。 Swift 中的对象默认不符合 KVO。
您可以通过继承 NSObject
:
添加 KVO 合规性
class Foo : NSObject, SomeBody {
var name: String = ""
}
或使个体 属性 可观察:
class Foo : SomeBody {
dynamic var name: String = ""
}
据我所知,无法通过协议定义强制执行此行为,仅在个别实现中支持它。
我觉得如果代码是接口驱动就好了
那么如何让 ReactiveCocoa 为 swift 中的协议工作呢?
例如
protocol SomeBody {
var name: String { get set }
}
...
class XXViewController {
@IBOutlet weak var someLabel:UILabel!
var someOne: SomeBody {
didSet {
RACObserve(someOne, "name").subscribeNext { [weak self](name) -> Void in
self?.someLabel.text = name as! String
}
}
}
....
}
RACObserve
建立在 KVO 之上,因此要使其工作 name
需要键值可观察。 Swift 中的对象默认不符合 KVO。
您可以通过继承 NSObject
:
class Foo : NSObject, SomeBody {
var name: String = ""
}
或使个体 属性 可观察:
class Foo : SomeBody {
dynamic var name: String = ""
}
据我所知,无法通过协议定义强制执行此行为,仅在个别实现中支持它。