Разные типы RxSwift - PullRequest
       9

Разные типы RxSwift

0 голосов
/ 11 декабря 2019

Я не знаю, как отобразить пользовательские типы. У меня есть две переменные с пользовательскими типами -

var viewModel: PurchaseList.Fetch.ViewModel? var response: PurchaseList.Fetch.Response?

    struct Response: Mappable {
        var shoppingList : [ShoppingList]?
    }

    struct ShoppingList: Mappable {
    var name: String?
    var offers: [Offers]?
    }

    struct Offers {
    var fullPrice: String?
    }

и

struct ViewModel {
var name: String?
var offers: [ViewModelOffers]?
}

struct ViewModelOffers {
var fullPrice: String?
}

как я могу создать var viewModel: PurchaseList.Fetch.ViewModel? из var response: PurchaseList.Fetch.Response?, используя RxSwift?

1 Ответ

0 голосов
/ 13 декабря 2019

Исходя из представленных вами типов, я предполагаю, что вы ищете код, подобный приведенному ниже. Этот код имеет много случайных сложностей из-за чрезмерного использования Optionals (?) в типах.

У Strings или Arrays практически нет причин быть необязательными. Логически, пустая строка ничем не отличается от нулевой строки (а пустой массив ничем не отличается от нулевого массива) в 99,99% случаев. В связи с этим необходимо привести веские аргументы, чтобы сделать их необязательными.

func example(_ from: Observable<Response?>) -> Observable<[ViewModel]?> {
    return from
        .map { $0?.shoppingList ?? [] }
        .map { $0.map{ $0.map(ViewModel.init) } }
}

extension ViewModel {
    init(_ shoppingList: ShoppingList) {
        name = shoppingList.name
        offers = shoppingList.offers?.map { ViewModelOffers(fullPrice: $0.fullPrice) }
    }
}
...