Swift Bond bidirectionalBind Общий параметр 'B' не может быть выведен - PullRequest
0 голосов
/ 21 сентября 2018

Я получаю сообщение об ошибке: Generic parameter 'B' could not be inferred при попытке создать Bond bidirectionalBind с необязательной строкой и UITextField.С необязательной строкой все работает нормально.

Ниже приведен пример Swift Code, демонстрирующий эту ошибку.

protocol ItemModel {
    var _id: Observable<String> { get set }
    var title: Observable<String?> { get set }
}

class Item: NSObject, ItemModel {
    var _id: Observable<String> = Observable<String>("")
    var title: Observable<String?> = Observable<String?>(nil)
}

class MyViewModel {
    var pendingItem: Item? = Item()
}

class MyViewController: UIViewController {
    private var viewModel: MyViewModel = MyViewModel()

    @IBOutlet var id: UITextField!
    @IBOutlet var titleField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        viewModel.pendingItem?._id.bidirectionalBind(to: id.reactive.text) // fails with error: Generic parameter 'B' could not be inferred
        viewModel.pendingItem?.title.bidirectionalBind(to: titleField.reactive.text)
    }
}

Проблема заключается в попытке установить bidirectionalBind на _idпроисходит сбой со следующей ошибкой:

Общий параметр 'B' не может быть выведен

Все точно так же между _id и title, за исключениемтот факт, что title является необязательным, а _id - нет.Это единственное, что я могу выяснить, почему это не получается.

Поэтому я думаю, что вопрос в том, как я могу сделать bidirectionalBind в Bond для UITextField на необязательной строковой переменной?Но в целом, как я могу исправить эту ошибку?


Некоторая другая информация.С точки зрения удобства использования, если id.text равно nil, что означает, что UITextField пуст, я бы хотел, чтобы он просто по умолчанию использовал пустую строку.Я знаю, что не могу установить nil, потому что _id не является обязательным.Поэтому установка значения по умолчанию на случай, если оно равно nil пустой строке, мне вполне подходит.

...