Swift Bond bidirectionalBind无法推断通用参数“ B”

时间:2018-09-21 18:24:12

标签: ios swift swiftbond

我遇到错误:尝试使用非可选字符串和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'

_idtitle之间的所有内容都完全相同,除了title是可选的而_id不是可选的事实。这是我唯一能弄清楚它为什么失败的东西。

因此,我认为问题是,如何在非可选字符串变量上绑定到UITextField的bidirectionalBind?但是更笼统地说,如何解决此错误?


其他一些信息。从可用性的角度来看,如果id.textnil,这意味着UITextField为空,我希望它默认为空字符串。我知道我无法将其设置为nil,因为_id不是可选的。因此,将默认值设置为nil为空字符串对我来说完全可以。

0 个答案:

没有答案