Как я могу написать расширение PrimitiveSequence, включающее <T: Codable> - PullRequest
1 голос
/ 10 июня 2019

Я пишу сетевой уровень с Мойей и RxSwift, ответ сервера JSON, например, так:

{ "code": 200, "msg": "", data: {}}

Я хочу возвращать данные только в случае успеха с кодом, равным 200, возвращать ошибку, если код не равен 200, чтоя должен делать?

Я пытаюсь написать код, подобный этому

extension PrimitiveSequence where TraitType == SingleTrait, ElementType == BaseBean<T: Codable> 

Это код объекта ответа:

struct BaseBean<T: Codable> : Codable {
    let code: Int
    let msg: String
    let data: T?

    func map() throws -> T {
        if code != 200 {
            throw ApiError(reason: msg)
        }
        if data == nil {
            throw ApiError(reason: "Empty Data")
        }
        return data!
    }
}

Я ожидаю, что метод вызова будет таким

  static func userInfo(params: UserInfoParams) -> Single<UserInfo> {
        return provider.rx.request(.userInfo(params: params)).map(BaseBean<UserInfo>).map()
    }

1 Ответ

1 голос
/ 12 июня 2019

Попробуйте вместо этого.

func userInfo(params: UserInfoParams) -> Single<UserInfo> {
    return provider.rx.request(.userInfo(params: params))
        .map(BaseBean<UserInfo>)
        .map { $0.map() }
    }

Я не думаю, что вы должны назвать свою функцию map(), лучше было бы что-то вроде validatedData().

...