Как я могу обменять тип ‘Result’ на тип данных в Swift

#swift

#swift

Вопрос:

Я получил какую-то ОШИБКУ, но понятия не имею.

введите описание изображения здесь

Код здесь.

    func object(for key: String) -> Observable<SwiftyJSON.JSON?> {
        return Observable.create { [weak self] observer in

            self?.cache?.async.object(forKey: key) { result in
                guard let data = result else {
                    observer.onNext(nil)
                    observer.onCompleted()
                    return
                }
                Async.userInteractive {
                    var json = SwiftyJSON.JSON(data: data)

                    Async.main {
                        if let error = json.error {
                            observer.onError(error)
                        } else {
                            observer.onNext(json)
                        }
                        observer.onCompleted()
                    }
                }
            }

            return Disposables.create()
        }
    }
 

Я использовал это https://github.com/hyperoslo/Cache .

Как я могу обменять «Результат» на «Данные»?

Ответ №1:

Result это перечисление, которое содержит либо (успешное) значение, либо ошибку.

Итак, как и любое перечисление, вы можете использовать switch оператор или if case let обозначение.

 if case let .success(data) = result {
   // do something with data
}
 
 // or similarly
guard case let .success(data) = result else { return }
// do something with data
 

Или:

 switch result {
case .success(let data):
   // do something with data
   ...
case .failure(let error):
   // do something with error
 

Вы также можете try получить значение из Result , которое было бы throw в случае ошибки:

 let data = try result.get()
 

Комментарии:

1. Спасибо за ваш ответ. Я был раскрыт. Я использовал это ‘guard case let .value(data) = result else { return }’