2016-10-30 2 views
0

Я создал простой проект для проверки библиотек, таких как RxAlamofire и AlamofireObjectMapper. У меня есть простой ApiService с одной конечной точкой, где есть PHP скрипт, который работает правильно и возвращает JSON. Я хочу позвонить в recipeURL, и я использую оператор flatMap, чтобы получить ответ и предоставить его в Mapper, где я должен получить Recipe объект. Как я могу это сделать?Swift 3, RxAlamofire и сопоставление с пользовательским объектом

Или есть другой способ?

class ApiService: ApiDelegate{ 
    let recipeURL = "http://example.com/test/info.php" 

    func getRecipeDetails() -> Observable<Recipe> { 
     return request(.get, recipeURL) 
      .subscribeOn(MainScheduler.asyncInstance) 
      .observeOn(MainScheduler.instance) 
      .flatMap({ request -> Observable<Recipe> in 
       let json = ""//request.??????????? How to get JSON response? 
       guard let recipe: Recipe = Mapper<Recipe>().map(JSONObject: json) else { 
        return Observable.error(ApiError(message: "ObjectMapper can't mapping", code: 422)) 
       } 
      return Observable.just(recipe) 
     }) 
    } 
} 

ответ

4

С ридми RxAlamofire «s, кажется, метод json(_:_:) существует в библиотеке.

Как правило, вы должны использовать map вместо flatMap, чтобы преобразовать возвращенные данные в другой формат. flatMap было бы полезно, если бы вам нужно было подписаться на новый наблюдаемый (например, выполняя второй запрос, используя часть результата из первого).

return json(.get, recipeURL) 
    .map { json -> Recipe in 
    guard let recipe = Mapper<Recipe>().map(JSONObject: json) else { 
     throw ApiError(message: "ObjectMapper can't mapping", code: 422) 
    } 
    return recipe 
    } 
+0

ok Thx. Я проверю – Michael

+0

Это работает thx;) – Michael

Смежные вопросы