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 = ""
}

据我所知,无法通过协议定义强制执行此行为,仅在个别实现中支持它。