RxSwift 错误:属性“文本”要求“UITextField”继承自“UILabel”

Posted

技术标签:

【中文标题】RxSwift 错误:属性“文本”要求“UITextField”继承自“UILabel”【英文标题】:RxSwift Error: Property 'text' requires that 'UITextField' inherit from 'UILabel' 【发布时间】:2020-05-29 09:12:05 【问题描述】:
func bindSearchTextField() 
        searchTextField.rx.text.asObservable().skip(3)
            .debounce(0.3, scheduler: MainScheduler.instance)
            .subscribe(onNext:  [weak self] searchText in
                guard let strongSelf = self else 
                    return
                
                if let text = searchText 
                    if text == "" 
                        self?.hideLoader()
                        self?.clearButton.isHidden = true
                     else 
                        self?.clearButton.isHidden = false
                    
                    strongSelf.presenter?.getAreaCodeList(text: text)
                
            ).disposed(by: disposeBag)
    

在我将 RxSwift 更新到最新版本(从 4.4.0 到 5.1.1)后,我收到了这个错误。 有人可以帮我吗?

【问题讨论】:

【参考方案1】:

改用:.debounce(.milliseconds(300), scheduler: MainScheduler.instance)。接受 Double 的 debounce(_:scheduler:) 已被删除。

另外,您在订阅中做的太多了。如果您将订阅分成独立的单元,您会更好:

let searchText = searchTextField.rx.text.asObservable().skip(3)
    .debounce(.milliseconds(300), scheduler: MainScheduler.instance)
    .compactMap  $0 

searchText
    .map  $0.isEmpty 
    .bind(to: clearButton.rx.isHidden)
    .disposed(by: disposeBag)

searchText
    .bind  [presenter] in
        presenter?.getAreaCodeList(text: $0)
    
    .disposed(by: disposeBag)

【讨论】:

非常感谢丹尼尔。它帮助我解决了错误并按照您的建议格式化了代码。

以上是关于RxSwift 错误:属性“文本”要求“UITextField”继承自“UILabel”的主要内容,如果未能解决你的问题,请参考以下文章

IOS RxSwift中UISearch栏文本和视图模型属性之间的两种方式绑定

无法分配给属性:“值”是一个只能获取的属性 RxSwift -

RxSwift 的结构视图模型

RxSwift - 在 UISearchBar 中以编程方式触发搜索

Rx Swift:复杂的文本字段验证

RxSwift之UI控件Label扩展的使用