【问题标题】:Bind UITextField to view model variable绑定 UITextField 以查看模型变量
【发布时间】:2017-09-07 16:20:25
【问题描述】:

我正在尝试使用 Bond 将 UI 元素绑定到我的视图模型。当我尝试将 searchTextField 绑定到我的视图模型 searchString 时,Xcode 8.3.3 给我一个“调用中的参数标签不正确(有 'to:',预期的 'signal:')”错误。怎么了?

import UIKit
import Bond
import ReactiveKit

class SearchViewModel {
   let searchString = Observable<String>("")
}

class SearchViewController: UIViewController {

   @IBOutlet weak var searchTextField: UITextField!

   let viewModel = SearchViewModel()

   override func viewDidLoad() {
      super.viewDidLoad()
      bindToViewModel()
   }

   func bindToViewModel() {
      searchTextField.reactive.text.bind(to: viewModel.searchString)
   }
}

【问题讨论】:

  • 您是否尝试过在 bindToViewModel 内部的函数调用中使用信号:而不是 to:?
  • 我也尝试使用信号,但这给出了:“无法将 'Property' 类型的值转换为预期的参数类型 'Signal'(又名 'Signal, NoError>')" 我正在尝试完全按照 Bond:s README 中所示的方式绑定它!?
  • 我将 let searchString = Observable("") 更改为 let searchString = Observable("") 然后它可以工作,但我不明白为什么它必须是可选。
  • 我没有在这方面做太多工作,但我认为这是因为这个扩展扩展 UITextField: BindableProtocol { public func bind(signal: Signal) -> Disposable { return reactive.text .bind(signal: signal) } } ,在 UITextField.swift 中,它需要一个可选的字符串,显然你可以进一步探索

标签: ios swift swiftbond


【解决方案1】:

问题是:

let searchString = Observable<String>("")

需要:

let searchString = Observable<String?>("")

因为UITextField: BindableProtocol { public func bind(signal: Signal&lt;String?, NoError&gt;) -&gt; Disposable { return reactive.text.bind(signal: signal) } } 需要一个可选的,正如 3stud1ant3 指出的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-11
    • 2016-01-23
    • 1970-01-01
    • 2012-08-27
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    相关资源
    最近更新 更多