我正在尝试从API提取json数据,将其解析为struct数组,然后打印该数组。但是,当我尝试将其打印出来时,仅返回一个空白数组。我试图了解如何为异步操作编写代码,并且不确定从何处去。有人能指出我正确的方向吗? 我正在使用Xcode 9,Swift 4在Playgrounds上进行尝试。
import Foundation
struct Item: Decodable {
var userId: Int?
var id: Int?
var title: String?
var body: String?
}
var items = [Item?]()
let completionHandler = { (data: Data?, response: URLResponse?, error: Error?) in
if error != nil {
print("Error occured: \(error.debugDescription)")
}
let decoder = JSONDecoder()
do {
items = try decoder.decode([Item].self, from: data!)
print(items)
} catch {
print("Error: Unable to fetch data")
}
}
func getJson() {
let url = URL(string: "https://jsonplaceholder.typicode.com/posts")!
let session = URLSession.shared
let task = session.dataTask(with: url, completionHandler: completionHandler)
task.resume()
print(items)
}
getJson()
答案 0 :(得分:0)
要能够在Playground中运行异步内容,您必须添加
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
三个注意事项:
print
之后的resume
行毫无意义。它将始终打印一个空数组。完成处理程序中的print
行显示了实际结果将items
声明为
var items = [Item]()
JSONDecoder()
返回非可选内容或引发错误
此特定的API始终发送所有字段,因此您甚至可以将所有struct成员声明为非可选
struct Item: Decodable {
var userId: Int
var id: Int
var title: String
var body: String
}