iOS RXSwift, как получить значение из результата .success?

Каков правильный синтаксис для получения значения, связанного с результатом .success в RXSwift?

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

person Alex Stone    schedule 20.08.2018    source источник
comment
Какой тип Result ? Я предполагаю, что это перечисление, и вам нужно использовать оператор switch.   -  person Valérian    schedule 20.08.2018


Ответы (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
}
person Daniel T.    schedule 20.08.2018
comment
@AlexStone добавил метод в качестве расширения. Я бы не стал беспокоиться, если бы это не было в библиотеке, которую нельзя редактировать. Честно говоря, я бы ожидал, что в любой приличной Result библиотеке уже есть такой метод, а также метод для извлечения ошибки, а также карта и flatMap. - person Daniel T.; 20.08.2018