RxSwift 无法将调用结果类型 '(_) -> Disposable' 转换为预期类型 '(_) ->

Posted

技术标签:

【中文标题】RxSwift 无法将调用结果类型 \'(_) -> Disposable\' 转换为预期类型 \'(_) ->【英文标题】:RxSwift Cannot convert call result type '(_) -> Disposable' to expected type '(_) ->RxSwift 无法将调用结果类型 '(_) -> Disposable' 转换为预期类型 '(_) -> 【发布时间】:2018-02-02 09:20:20 【问题描述】:

我正在尝试使用 RxSwift 将 headerView 添加到 collectionView。

我得到这个错误:

无法将调用结果类型 '() -> Disposable' 转换为预期类型 '() ->

在这一行:

obsHeader.asObservable().bind(to: collectionView.rx.items(dataSource: dataSource)).disposed(by: disposeBag)

我不明白如何解决它。有什么帮助吗?

我把剩下的代码贴在这里:

struct SectionItemObject 
    let collectionViewRecommendations: UICollectionView
    let items: [SFCardViewModelListOfCardsProtocol]


struct SectionOfItems 
    var items: [Item]


extension SectionOfItems: SectionModelType 

    typealias Item = SectionItemObject

    init(original: SectionOfItems, items: [Item]) 
        self = original
        self.items = items
    

    init(items: [Item]?) 
        self.items = items ?? [Item]()
    

这就是我在我调用观察的方法中写的。

let dataSource = RxCollectionViewSectionedReloadDataSource<SectionOfItems>(configureCell:  (datasource, collectionview, indexPath, i) -> UICollectionViewCell in
        let cell = collectionview.dequeueReusableCell(withReuseIdentifier: "CardView", for: indexPath) as! CardView
        //                self.setCell(card:card,cell:cell)
        cell.lbTitle.text = "TEST"
        return cell
    , configureSupplementaryView:  (datasource, collectionview, kind, indexPath) -> UICollectionReusableView in
        let section = collectionview.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "AddNewCardCollectionHeaderView", for: indexPath) as! AddNewCardCollectionHeaderView
        section.backgroundColor = UIColor.orange
        section.collectionViewRecommendations = self.collectionViewRecommendations
        return section
     )

let item = SectionItemObject(collectionViewRecommendations: self.collectionViewRecommendations!, items: viewModelProtocol.searchedCards.value)
let obsHeader = Variable(SectionOfItems(items: [item]))

obsHeader.asObservable().bind(to: collectionView.rx.items(dataSource: dataSource)).disposed(by: disposeBag)

【问题讨论】:

我试图编译你的代码,在我的例子中,它抱怨的不是你提到的那一行,而是“dataSource”声明(“传递给不带参数的调用的参数”)。 我编辑了代码,完全复制了我正在编译的内容。你现在可以检查吗?谢谢!! 【参考方案1】:

我敢打赌,您的obsHeader 需要输入为Variable&lt;[SectionOfItems]&gt;

那么就去做吧

let obsHeader = Variable([SectionOfItems(items: [item])])

【讨论】:

谢谢!是的,就是这样!

以上是关于RxSwift 无法将调用结果类型 '(_) -> Disposable' 转换为预期类型 '(_) ->的主要内容,如果未能解决你的问题,请参考以下文章

RxSwift:结合不同类型的可观察对象和映射结果

如何在 RxSwift 中设置 RxTimeInterval 以防抖动?

使用 RxSwift 进行分页 API 调用

Alamofire:错误:无法将“结果<_,_>”类型的值分配给“结果”类型

如何使用 RxSwift 和 Alamofire 库调用来自另一个 API 的响应的 API?

RxSwift withLatestFrom 和 resultSelector 无法编译