我有一个函数,该函数接受与RxSwift相关的两个参数并双向绑定它们。
import Foundation
import RxSwift
import RxCocoa
func bibind<T>(property: ControlProperty<T>, variable: Variable<T>) -> Disposable {
var updating = false
let bindToUIDisposable = variable.asObservable().filter({ _ in
updating = !updating
return updating
}).bind(to: property)
let bindToVariable = property.filter({ _ in
updating = !updating
return updating
}).subscribe(onNext: { n in
variable.value = n
}, onCompleted: {
bindToUIDisposable.dispose()
})
return CompositeDisposable(bindToUIDisposable, bindToVariable)
}
我正试图这样称呼
bibind(property: self.userNameTextField.rx.text, variable: self.loginViewModel.userName.value )
哪个显示了编译器错误
Expression type 'Variable<String>' is ambiguous without more context
视图模型是这个
import Foundation
import RxSwift
import RxCocoa
class LoginViewModel {
var userName = Variable<String>("")
var password = Variable<String>("")
init() {
userName = Variable("")
password = Variable("")
}
}
答案 0 :(得分:1)
类型不匹配。 userNameTextField.rx.text
返回一个Observable<String?>
,而您的变量是一个Observable<String>
。您可以像在orEmpty
中一样使用userNameTextField.rx.text.orEmpty
来解决此问题。
通常,当您看到此错误时,这意味着类型不匹配,您需要通过更改对象之一的类型来修复它。