Swift 3、RxAlamofire 和映射到自定义对象

Posted

技术标签:

【中文标题】Swift 3、RxAlamofire 和映射到自定义对象【英文标题】:Swift 3, RxAlamofire and mapping to custom object 【发布时间】:2016-10-30 22:01:22 【问题描述】:

我创建了一个简单的项目来检查 RxAlamofire 和 AlamofireObjectMapper 等库。我有一个简单的ApiService,其中一个端点是php 脚本,它可以正常工作并返回JSON。我想打电话给recipeURL 并使用flatMap 运算符来获得响应并将其提供给Mapper 我应该得到Recipe 对象。我该怎么做?

或者有其他方法吗?

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)
        )
    

【问题讨论】:

【参考方案1】:

RxAlamofire的自述文件看来,库中似乎有一个方法json(_:_:)

通常,您宁愿使用map 而不是flatMap 将返回的数据转换为另一种格式。如果您需要订阅新的 observable(例如,使用第一个请求的部分结果进行第二个请求),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
   

【讨论】:

以上是关于Swift 3、RxAlamofire 和映射到自定义对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift4 中使用 Rxalamofire 发送 URL 请求

有没有办法在 Swift 或 RxAlamofire 中退出浏览器会话?

Swift 3 或 4 保存到自定义相册会创建重复的图像

Swift:将照片添加到自定义相册

从实体框架映射到自定义域模型类?

将嵌套对象作为道具映射到自定义组件