如何将json数据从alamofire转换为swift对象
嗨在那里即时使用swift 1.1在Xcode 6.2中快速的照片查看器应用程序
我有麻烦试图从alamofire转换json响应swift对象。我已经使用swiftyjson库,但似乎有一个兼容性issues.here是我的模型类
import Foundation struct Photo { var name: String var filename :String var notes: String }
这里是我的viewController
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对象
谢谢 。
最好的解决scheme是使用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"] } }
在viewController中:
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) } } } }
查看AlamofireObjectMapper
和ObjectMapper
的文档以获取更多信息。
你可以使用EVReflection 。 你可以使用如下代码:
var photo:Photo = Photo(json:jsonString)
要么
var jsonString:String = photo.toJsonString()
您只需将您的基础对象设置为EVObject。
有关更详细的示例代码(包括数组),请参阅GitHub页面。
如果你不想写映射函数,我build议你看看HandyJSON
。 一个代码示例:
结构动物:HandyJSON { var name:String? var id:String? var num:Int? } 让jsonString =“{\”name \“:\”cat \“,\”id \“:\”12345 \“,\”num \“:180} 如果让动物= JSONDeserializer.deserializeFrom(json:jsonString){ 打印(动物) }
正如它所说:
HandyJSON最显着的特点是它不需要从NSObjectinheritance的对象(不使用KVC而是reflection),既不实现“映射”function(使用指针来实现属性分配)。
你可以使用dataUsingEncoding
方法,并从json
对象获取你的name,filename
和notes
variables,并且为了parsingjson对象,我推荐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) } })