универсальный параметр функции, дающий «тип выражения неоднозначен без дополнительного контекста» - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть функция, которая принимает два параметра, связанных с 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 голосов
/ 01 декабря 2018

Типы не совпадают.userNameTextField.rx.text возвращает Observable<String?>, а ваша переменная - Observable<String>.Вы можете исправить это, используя orEmpty как в userNameTextField.rx.text.orEmpty.

В общем, когда вы видите эту ошибку, это означает, что типы не совпадают, и вам нужно исправить это, изменив типобъектов.

...