Я получаю сообщение об ошибке: 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
пустой строке, мне вполне подходит.