您好我能从服务器获取阵列列表的响应。但我不知道如何在对象数组[Feed]中解析该响应并在完成处理程序上发送它。我的守则如下:
class FeedsService {
private var feedsEndPoint: String = "https://jsonplaceholder.typicode.com/posts"
public func getFeeds(completion: ([Feed]) -> Void) {
Alamofire.request(feedsEndPoint, method: .get)
.validate(statusCode: 200..<300)
.validate(contentType: ["application/json"])
.responseJSON{ response in
print("Response \(response.result.value)")
}
}
}
Feed模型如下:
class Feed {
private var title: String
private var body: String
init(title:String, body: String) {
self.title = title
self.body = body
}
public func getTitle() -> String {
return self.title
}
public func getBody() -> String {
return self.body;
}
}
我想将其解析为Feed Array并在完成回调时发送它。 我正在使用Alamofire rest库从休息服务器加载数据。
答案 0 :(得分:0)
你可以试试这个:
class FeedsService {
private var feedsEndPoint: String = "https://jsonplaceholder.typicode.com/posts"
public func getFeeds(completion: @escaping ([Feed]) -> Void) {
Alamofire.request(feedsEndPoint, method: .get)
.validate(statusCode: 200..<300)
.validate(contentType: ["application/json"])
.responseJSON{ response in
print("Response \(response.result.value)")
var feeds = [Feed]()
if let jsonArray = response.result.value as? [[String: Any]] {
for json in jsonArray {
if let feed = Feed(json: json) {
feeds.append(feed)
}
}
completion(feeds)
} else {
// handle error
}
}
}
}
此外,更新您的Feed类:
class Feed {
private var title: String
private var body: String
init(title:String, body: String) {
self.title = title
self.body = body
}
init?(json: [String: Any]) {
guard let title = json["title"] as? String,
let body = json["body"] as? String else {
return nil
}
self.title = title
self.body = body
}
public func getTitle() -> String {
return self.title
}
public func getBody() -> String {
return self.body;
}
}
只需将“title”和“body”更改为json响应中的相应键即可。
正如 El Tomato 指出Feed init无效,这是一个可以在游乐场试用的测试代码:
let testFeedJson = ["title": "Test Title", "body" : "Test Body"]
if let testFeed = Feed(json: testFeedJson) {
print(testFeed.getTitle())
print(testFeed.getBody())
}