JSON 使用 Swift 4
JSON using Swift 4
首先,我的问题可能已经有人问过了,但我搜索了很多教程和论坛,但我无法解决这个问题,因为我是法国人,英语不是很好。
我尝试使用我的应用阅读 JSON,但它不起作用。唯一打印的是 "Foundation.JSONDecoder"
这是我的 SWIFT 4 代码:
func getSpots(){
guard let downloadURL = URL(string: "http://dronespot.fr/getSpot.php") else { return }
URLSession.shared.dataTask(with: downloadURL) { data, urlResponse, error in
guard let data = data, error == nil, urlResponse != nil else {
print("Oops Call for Help")
return
}
print("downloaded")
do
{
let decoder = JSONDecoder()
//let rates = try decoder.decode([Artwork].self, from: data)
print(decoder)
} catch {
print("Error after loading")
}
}.resume()
}
Artwork.swift :
init?(json: [Any]) {
// 1
self.title = json[16] as? String ?? "No Title"
self.locationName = json[12] as! String
self.id = 3
self.img = "tamere"
// 2
if let latitude = Double(json[18] as! String),
let longitude = Double(json[19] as! String) {
self.coordinate = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
} else {
self.coordinate = CLLocationCoordinate2D()
}
}
预计 JSON:
因为你想使用 JSONDecoder
你的方法是完全错误的(除了你注释掉实际行以解码 JSON 的问题)。
创建Artwork
作为采用Decodable
的结构,将JSON中的键声明为属性并添加一个惰性实例化变量来构建坐标:
struct Artwork : Decodable {
let nom : String
let description : String
let id: String
let img1 : String
let latitude : String
let longitude : String
// there are much more keys
lazy var coordinate : CLLocationCoordinate2D = {
return CLLocationCoordinate2D(latitude: Double(latitude) ?? 0.0, longitude: Double(longitude) ?? 0.0)
}()
}
现在解码Artwork
的数组
do {
let decoder = JSONDecoder()
let rates = try decoder.decode([Artwork].self, from: data)
print(rates)
} catch {
print("Error after loading", error)
}
首先,我的问题可能已经有人问过了,但我搜索了很多教程和论坛,但我无法解决这个问题,因为我是法国人,英语不是很好。
我尝试使用我的应用阅读 JSON,但它不起作用。唯一打印的是 "Foundation.JSONDecoder"
这是我的 SWIFT 4 代码:
func getSpots(){
guard let downloadURL = URL(string: "http://dronespot.fr/getSpot.php") else { return }
URLSession.shared.dataTask(with: downloadURL) { data, urlResponse, error in
guard let data = data, error == nil, urlResponse != nil else {
print("Oops Call for Help")
return
}
print("downloaded")
do
{
let decoder = JSONDecoder()
//let rates = try decoder.decode([Artwork].self, from: data)
print(decoder)
} catch {
print("Error after loading")
}
}.resume()
}
Artwork.swift :
init?(json: [Any]) {
// 1
self.title = json[16] as? String ?? "No Title"
self.locationName = json[12] as! String
self.id = 3
self.img = "tamere"
// 2
if let latitude = Double(json[18] as! String),
let longitude = Double(json[19] as! String) {
self.coordinate = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
} else {
self.coordinate = CLLocationCoordinate2D()
}
}
预计 JSON:
因为你想使用 JSONDecoder
你的方法是完全错误的(除了你注释掉实际行以解码 JSON 的问题)。
创建Artwork
作为采用Decodable
的结构,将JSON中的键声明为属性并添加一个惰性实例化变量来构建坐标:
struct Artwork : Decodable {
let nom : String
let description : String
let id: String
let img1 : String
let latitude : String
let longitude : String
// there are much more keys
lazy var coordinate : CLLocationCoordinate2D = {
return CLLocationCoordinate2D(latitude: Double(latitude) ?? 0.0, longitude: Double(longitude) ?? 0.0)
}()
}
现在解码Artwork
do {
let decoder = JSONDecoder()
let rates = try decoder.decode([Artwork].self, from: data)
print(rates)
} catch {
print("Error after loading", error)
}