代码之家  ›  专栏  ›  技术社区  ›  Alex Stone

iOS RxSwift-如何使用Amb运算符?

  •  1
  • Alex Stone  · 技术社区  · 6 年前

    我正在寻找RxSwift的Amb()操作符的示例。

    let started = viewModel.networkAPI.filter { result in
                switch result {
                case .success:
                    return true
                case .failure:
                    return false
                }
            }
    
        let stopped = viewModel.networkAPI.filter { result in
            switch result {
            case .success:
                return true
            case .failure:
                return false
            }
        }
    

    我试过:

        Observable<Bool>.amb([started, stopped])
    //error - Ambiguous reference to member 'amb'
    //Found this candidate (RxSwift.ObservableType)
    //Found this candidate (RxSwift.ObservableType)
    

     started.amb(stopped)
    //error - Generic parameter 'O2' could not be inferred
    

    如何正确地使用RxSwift AMB操作符从两个观察值中选择一个首先发出一个值?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Alex Stone    6 年前

    问题不在你发布的代码中。我猜那是你的 Result amb

    你可以通过 let foo = [started, stopped] foo

    异类集合文字只能推断为“[Any]”;如果有意,请添加显式类型注释

    //convert both to the same emission type,
    //then apply .amb after one of them
    
    let stoppedBoolType = stopped.map { _ -> Bool in
        return false
    }
    started.map{ _ -> Bool in
        return true
        }.amb(stoppedBoolType)