绑定 UITextField 以查看模型变量

Posted

技术标签:

【中文标题】绑定 UITextField 以查看模型变量【英文标题】:Bind UITextField to view model variable 【发布时间】: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 中,它需要一个可选的字符串,显然你可以进一步探索 【参考方案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 指出的那样。

【讨论】:

以上是关于绑定 UITextField 以查看模型变量的主要内容,如果未能解决你的问题,请参考以下文章

UITextField - 检测内置 iPhone 键盘上的输入?

UITextField 使用 RxSwift 绑定到 ViewModel

使用 RxSwift 将多个 UITextField 绑定到类道具

动态更改 UITextField 宽度取决于内容

滚动 UITableView 框架问题以查看单元格中的 UITextField?

[NSPlaceholderMutableString initWithString:]:转换 UITextField 后出现 nil 参数异常