泛型函数参数,给出“表达类型不明确,无需更多上下文”

时间:2018-11-30 21:04:04

标签: swift mvvm rx-swift

我有一个函数,该函数接受与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("")
    }
}

1 个答案:

答案 0 :(得分:1)

类型不匹配。 userNameTextField.rx.text返回一个Observable<String?>,而您的变量是一个Observable<String>。您可以像在orEmpty中一样使用userNameTextField.rx.text.orEmpty来解决此问题。

通常,当您看到此错误时,这意味着类型不匹配,您需要通过更改对象之一的类型来修复它。