为什么以下RxSwift代码无法编译,我该如何解决该问题?问题observer.onNext("test123")
这行。
final class TestA<String>: ObservableType {
typealias E = String
private let _observable: Observable<String>
init() {
_observable = Observable<String>.create { observer -> Disposable in
print("mark 1")
observer.onNext("test123")
observer.onCompleted()
return Disposables.create()
}
}
func subscribe<O>(_ observer: O) -> Disposable where O : ObserverType, O.E == E {
return _observable.subscribe(observer)
}
}
let observable = TestA<String>()
print("mark 2")
observable.subscribe(onNext: { element in
print(element)
})
我正在操场上进行测试,并出现以下错误:
操场执行失败:
错误:Introduction.xcplaygroundpage:25:26:错误:无法使用类型为((String)'的参数列表调用'onNext'> rator.onNext(“ test123”) ^
Introduction.xcplaygroundpage:25:26:注意:期望>类型'(String)'的参数列表 rator.onNext(“ test123”) ^
使用该类进行此设置的原因之一是,我想通过构造函数注入传递依赖项,并在create闭包中使用它们,以避免必须捕获self。我还希望避免在野外使用所有这些Observable.create
,而要采用更多的OOP方法。
答案 0 :(得分:1)
Swift编译器对该错误没有帮助...
这里的问题是,在声明TestA
时,您将覆盖名称String
来表示TestA
的通用参数。然后,将Swift.String
作为参数发送给期望TestA.String
的观察者是错误的。
您可以通过删除未使用的通用参数(final class TestA: ObservableType { ...
)或将发送给onNext
的值作为参数作为初始化参数来解决此问题,具体取决于用例。
final class TestA<Element>: ObservableType {
typealias E = Element
private let _observable: Observable<Element>
init(_ value: Element) {
_observable = Observable<Element>.create { observer -> Disposable in
print("mark 1")
observer.onNext(value)
observer.onCompleted()
return Disposables.create()
}
}
func subscribe<O>(_ observer: O) -> Disposable where O : ObserverType, O.E == E {
return _observable.subscribe(observer)
}
}