我不太明白
typealias
是为了。函数声明本身就足以告诉编译器
BindType
必须是。
我在你的代码中发现的问题(当然,除了缺少可观察的声明之外)是反应类
它本身
不符合TwowayBindDelegate。为了解决这个问题,我在
twoWayBind
。当我删除了不必要的
类型别名
声明,你为我编译的代码:
struct Observable<T> {}
protocol TwoWayBindDelegate: class {
associatedtype BindType
func twoWayBind(to observable: Observable<BindType>?, observableChanged: ((BindType) -> ())?)
}
class Reactive<Base: UIView>: TwoWayBindDelegate {
public var base: Base
init(base: Base) {
self.base = base
}
func twoWayBind(to observable: Observable<Int>?, observableChanged: ((Int) -> ())?) {
}
}
extension Reactive where Base == UISlider {
func twoWayBind(to observable: Observable<Float>?, observableChanged: ((Float) -> ())?) {
}
}
extension Reactive where Base == UITextField {
func twoWayBind(to observable: Observable<String>?, observableChanged: ((String) -> ())?) {
}
}