我遇到错误:尝试使用非可选字符串和Generic parameter 'B' could not be inferred
进行Bond bidirectionalBind
时出现UITextField
。使用可选的字符串可以正常工作。
下面是一些显示此错误的示例Swift代码。
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
不是可选的事实。这是我唯一能弄清楚它为什么失败的东西。
因此,我认为问题是,如何在非可选字符串变量上绑定到UITextField的bidirectionalBind
?但是更笼统地说,如何解决此错误?
其他一些信息。从可用性的角度来看,如果id.text
为nil
,这意味着UITextField为空,我希望它默认为空字符串。我知道我无法将其设置为nil
,因为_id
不是可选的。因此,将默认值设置为nil
为空字符串对我来说完全可以。