我正在使用带有xcode 7.3.1的Swift 2。
我有Alamofire 3.4&我的项目中SwiftyJSON。我知道我可以使用以下代码将响应结果值从Alamofire转换为JSON
(由SwiftyJSON定义的结构)类型:
Alamofire.request(.GET, url).validate().responseJSON { response in
switch response.result {
case .Success:
if let value = response.result.value {
// now I get JSON type object, then what?
let json = JSON(value)
print("JSON: \(json)")
}
case .Failure(let error):
print(error)
}
}
我的问题是在我得到json
后,如何将其转换为自定义类的对象?
例如,json
具有以下结构:
{"name":
"Kate",
"age": 23,
"books":[{"id":1,"name":"book-1"},{"id":2,"name":"book-2"}]
}
我有一个Swift课程:
class Student {
var name: String!
var age: Int!
var books:[Book]
...
}
class Book {
var id: Int!
var name: String!
...
}
我如何将json
转换为Student
个对象,反之亦然,使用Alamofire& SwiftyJSON?
(我是iOS的新手,我刚发现互联网上的人建议这两个库用于JSON响应处理,所以我使用它们。请指出我是否没有必要或是否有其他有效的方法来实现它。在此先感谢。)
答案 0 :(得分:1)
我认为你可以在 Book 和 Student 结构中添加json数据的转换方法,使用 Struct 而不是 Class 在Swift中。我写了一些示例代码,
struct Book {
var id: Int
var name: String
static func booksFromJSONArray(jsonArray: [JSON]) -> [Book]? {
return jsonArray.flatMap{ jsonItem -> Book in
guard let id = jsonItem["id"].int,
let name = jsonItem["name"].string
else { return nil }
return Book(id: id, name: name)
}
}
struct Student {
var name: String
var age: Int
var books: [Book]
func studentFromJSONData(jsonData: JSON) -> Student {
let name = jsonData["name"].stringValue
let age = jsonData["age"].intValue
let books = Book.booksFromJSONArray(jsonData["books"].arrayValue)
return Student(name: name, age: age, books: books)
}
}