【问题标题】:How to convert json data from alamofire to swift objects如何将 json 数据从 alamofire 转换为 swift 对象
【发布时间】:2015-06-15 06:39:48
【问题描述】:

您好,我正在使用 swift 1.1 在 swift 中制作照片查看器应用程序 xcode 6.2

我在尝试将 json 响应从 alamofire 到 swift objects。我使用了 swiftyjson 库,但似乎 存在兼容性问题。这是我的模型类

import Foundation

struct Photo {

    var name: String
    var filename :String
    var notes: String
}

这是我的视图控制器

    import UIKit

    class ImageViewerTableViewController: UITableViewController {
    var photos = [Photo]()

        override func viewDidLoad() {
            super.viewDidLoad()

Alamofire.request(.GET, "http://httpbin.org/get")
         .responseJSON { (_, _, JSON, _) in

         }

      }

在这种情况下如何将 json 映射到 swift 对象

谢谢。

【问题讨论】:

  • 在 Alamofire 中以 JSON 形式返回什么?如果它是一个类,请查看其源代码并尝试找出一种将每个值手动放入字典中的方法。

标签: ios swift alamofire


【解决方案1】:

最好的解决方案是使用AlamofireObjectMapper

您的代码应如下所示:

import Foundation
import ObjectMapper

struct Photo: Mappable {
    var name: String
    var filename :String
    var notes: String

    required init?(map: Map) {}

    func mapping(map: Map) {
        self.name     <- map["name"]
        self.filename <- map["filename"]
        self. notes   <- map["notes"]
    }
}

在视图控制器中:

import UIKit

class ImageViewerTableViewController: UITableViewController {
    var photos = [Photo]()

    override func viewDidLoad() {
        super.viewDidLoad()

        Alamofire
            .request(.GET, "http://httpbin.org/get")
            .responseArray { (response: Response<[Photo], NSError>) in
            if let myPhotos = response.result.value {
                print(myPhotos)
            }
        }
    }
}

查看AlamofireObjectMapperObjectMapper 的文档了解更多信息。

【讨论】:

    【解决方案2】:

    您可以使用dataUsingEncoding 方法,并从json 对象中获取您的name,filenamenotes 变量,对于解析json 对象,我推荐SwiftyJSON

    Alamofire.request(.GET, "http://httpbin.org/get", parameters: nil, encoding: .URL).responseString(completionHandler: {
            (request: NSURLRequest, response: NSHTTPURLResponse?, responseBody: String?, error: NSError?) -> Void in
    
            // Convert the response to NSData to handle with SwiftyJSON
            if let data = (responseBody as NSString).dataUsingEncoding(NSUTF8StringEncoding) {
                let json = JSON(data: data)
                println(json)
            }
    })
    

    【讨论】:

      【解决方案3】:

      您可以为此使用EVReflection。您可以使用如下代码:

      var photo:Photo = Photo(json:jsonString)
      

      var jsonString:String = photo.toJsonString()
      

      您只需将基础对象设置为 EVObject。

      有关更详细的示例代码(包括数组),请参阅 GitHub 页面。

      【讨论】:

      【解决方案4】:

      如果你不想写映射函数,我建议你看看HandyJSON。代码示例:

      结构动物:HandyJSON { 变量名称:字符串? 变量 id:字符串? 变量编号:整数? } 让 jsonString = "{\"name\":\"cat\",\"id\":\"12345\",\"num\":180}" 如果让动物 = JSONDeserializer.deserializeFrom(json: jsonString) { 打印(动物) }

      正如它所说:

      HandyJSON最显着的特点是它不需要对象继承自NSObject(不是使用KVC而是反射),也没有实现'mapping'函数(使用指针来实现属性赋值)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-05
        • 2011-03-17
        • 2011-05-20
        • 2011-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多