我有一个函数,它接受两个与 RxSwift 相关的参数并双向绑定(bind)它们。
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
View 模型是这样的
import Foundation
import RxSwift
import RxCocoa
class LoginViewModel {
var userName = Variable<String>("")
var password = Variable<String>("")
init() {
userName = Variable("")
password = Variable("")
}
}
最佳答案
类型不匹配。 userNameTextField.rx.text
返回 Observable<String?>
你的变量是 Observable<String>
.您可以使用 orEmpty
解决此问题如 userNameTextField.rx.text.orEmpty
.
通常,当您看到此错误时,表示类型不匹配,您需要通过更改其中一个对象的类型来修复它。
关于swift - 通用函数参数给出 "Expression type is ambiguous without more context",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53564878/