【问题标题】:iOS RXSwift how to get value from .success Result?iOS RXSwift 如何从 .success Result 中获取价值?
【发布时间】:2018-08-20 13:59:00
【问题描述】:

在 RXSwift 中获取与 .success Result 关联的值的正确语法是什么?

.map{ (result : Result<Double>) -> Double in
        //how to get duration from result? this does not work
        let duration : Double = result.success.value
        return duration
}

【问题讨论】:

  • Result 是什么类型?我猜它是一个枚举,你需要使用 switch 语句。

标签: swift3 ios11 rx-swift associated-types


【解决方案1】:

添加通用扩展:

enum Result<T> {
    case success(T)
    case failure(Error)
}

extension Result {

    var successResult: T? {
        guard case let .success(value) = self else { return nil }
        return value
    }
}

通过以上你可以做到:

result.successResult.map { duration in 
    // do something with duration
}

【讨论】:

  • @AlexStone 将该方法添加为扩展。除非它在无法编辑的库中,否则我不会打扰。坦率地说,我希望任何像样的Result 库都已经拥有这样的方法以及提取错误的方法,以及地图和平面地图。
【解决方案2】:

Swift 中的 Result 有一个 get() 函数,它以抛出表达式的形式返回成功值。所以你可以这样称呼:

var successVal = try? result.get()

【讨论】:

    猜你喜欢
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2017-10-01
    • 2018-04-07
    • 2021-12-26
    • 1970-01-01
    • 2016-08-24
    相关资源
    最近更新 更多