RxDataSources`无法推断通用参数'Self'`

Posted

技术标签:

【中文标题】RxDataSources`无法推断通用参数\'Self\'`【英文标题】:RxDataSources `Generic parameter 'Self' could not be inferred`RxDataSources`无法推断通用参数'Self'` 【发布时间】:2019-03-26 12:06:48 【问题描述】:

我知道有很多关于此的问题,我查看了所有问题,但它并没有解决我的问题。我还评论了其中一个,但问题似乎不再活跃,所以我不希望那里有答案。

我正在尝试实现 RxDataSources。请参阅下面的代码:

struct ActiveOrdersSection: Equatable 
    static func == (lhs: ActiveOrdersSection, rhs: ActiveOrdersSection) -> Bool 
        return true
    

    var header: String
    var orders: [Order]


extension ActiveOrdersSection: SectionModelType 
    typealias Item = Order

    var items: [Item] 
        set 
            orders = items
        
        get 
            return orders
        
    

    init(original: ActiveOrdersSection, items: [Order]) 
        self = original
        self.items = items
    

还有 ViewController:

class MainViewController: UITableViewDelegate, UITableViewDataSource 

    var db: DisposeBag?
    var dataSource: RxTableViewSectionedReloadDataSource<ActiveOrdersSection>?
    private func setupOrderRx(_ shopId: Int64) 
        let dataSource = RxTableViewSectionedReloadDataSource<ActiveOrdersSection>(
            configureCell:  ds, tv, ip, item in
                let cell = tv.dequeueReusableCell(withIdentifier: "Cell", for: ip) as! UITableViewCell
                cell.textLabel?.text = "Item \(item.id)"
                return cell
            ,

            titleForHeaderInSection:  ds, ip in
                return ds.sectionModels[ip].header
            
        )

        self.dataSource = dataSource
        db = DisposeBag()
        let ors = OrderRxService.listAsShop(shopId, status: .active)
            .map  Observable.just($0.items)  // Convert from Observable<CollectionResponse<Order>> to Observable<Order>
            .observeOn(MainScheduler.instance)
            .bind(to: self.rxTableView.rx.items(dataSource: dataSource))
    


我在.bind(to: self.rxTableView.rx.items(dataSource: dataSource)) 上收到Generic parameter 'Self' could not be inferred。我查看了 RxDataSources 示例,现在似乎有相同的内容,但我似乎无法修复此错误。

有什么想法吗?

【问题讨论】:

【参考方案1】:

您绑定到RxTableViewSectionedReloadDataSource 的Rx 流必须是Observable&lt;[ActiveOrdersSection]&gt; 类型。我不确切知道您在此示例中的类型是什么,因为您提供的代码还不够,但是 我认为通过使用.map Observable.just($0.items) ,结果流将是Observable&lt;Observable&lt;[Order]&gt;&gt; 类型。 尝试将其更改为: .map [ActiveOrdersSection(header: "Your Header", orders: 0.items)]

【讨论】:

谢谢!我似乎没有完全理解 RxDataSources 的概念。这解决了我的问题。

以上是关于RxDataSources`无法推断通用参数'Self'`的主要内容,如果未能解决你的问题,请参考以下文章

无法推断通用参数“SelectionValue”

无法推断通用参数“值”

通用扩展方法:无法从用法推断类型参数

RxSwift - 无法推断通用参数“Self”

从 ForEach 中引用变量时,SwiftUI“无法推断通用参数'数据'”

无法推断通用参数“T” - Swift 5.5