Swift, можно ли было заставить ReactiveCocoa работать по протоколу
Я думаю, что это хорошо, если код был интерфейсом привода
так как заставить 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
}
}
}
....
}
1 ответ
Решение
RACObserve
построен на вершине КВО, так что для его работы name
должен быть наблюдаемым значением ключа. Объекты в Swift по умолчанию не совместимы с KVO.
Вы можете добавить соответствие KVO, унаследовав от NSObject
:
class Foo : NSObject, SomeBody {
var name: String = ""
}
Или сделать индивидуальную собственность наблюдаемой:
class Foo : SomeBody {
dynamic var name: String = ""
}
AFAIK, нет способа обеспечить такое поведение с помощью определения протокола, только поддерживать его в отдельных реализациях.