Hallo Leute Ich weiß nicht, warum das Array Places seltsame Werte wie 0x6080004b3aa0 zurückgibt, anstatt meinen Titel, Koordinate und Untertitel aus meiner JSON-URL anzuzeigen. Danke für Ihre Hilfe!Seltsame Ergebnisse mit Parsing von JSON in Swift3
import MapKit
@objc class Place: NSObject {
var title: String?
var coordinate: CLLocationCoordinate2D
var subtitle: String?
init(title:String,subtitle:String, coordinate:CLLocationCoordinate2D){
self.title = title
self.coordinate = coordinate
self.subtitle = subtitle
}
static func getPlaces() -> [Place] {
guard let url = NSURL(string: "https://script.googleusercontent.com/macros/echo?user_content_key=Z-LfTMdhgAg_6SRd-iMucSyWu-LFBQO8MLxJZ6DPcL05Rtr3joCCypWD2l46qaegSpVpVINc1DLl5inoDOgGx3p3ANpY1AkGOJmA1Yb3SEsKFZqtv3DaNYcMrmhZHmUMWojr9NvTBuBLhyHCd5hHa1ZsYSbt7G4nMhEEDL32U4DxjO7V7yvmJPXJTBuCiTGh3rUPjpYM_V0PJJG7TIaKp4bydEiKBUZP6fpOyGJIhkmEGneM7ZIlWloTVbXmkjs15vHn8T7HCelqi-5f3gf3-sKiW3k6MDkf31SIMZH6H4k&lib=MbpKbbfePtAVndrs259dhPT7ROjQYJ8yx") else { return [] }
let request = NSMutableURLRequest(url: url as URL!)
var places = [Place]()
let task = URLSession.shared.dataTask(with: request as URLRequest) {data,response,error in
guard error == nil && data != nil else {
print ("Error:",error)
return
}
let httpStatus = response as? HTTPURLResponse
if httpStatus?.statusCode == 200
{ if data?.count != 0
{
let responseString = try! JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! NSDictionary
let contacts = responseString["Sheet1"] as? [AnyObject]
for contact in contacts!{
var places = [Place]()
let title = contact["name"] as! String
let subtitle = contact["description"] as? String
let latitude = contact["latitude"] as? Double ?? 0, longitude = contact["longitude"] as? Double ?? 0
let place = Place(title:title,subtitle:subtitle!,coordinate: CLLocationCoordinate2DMake(latitude, longitude))
places.append(place)
print(latitude)
print(place)
}
}
else {
print("No data got from url")
}
} else {
print("error httpsatus code is:", httpStatus!.statusCode)
}
}
task.resume()
return places as [Place]
}
}
Ich denke, das Problem ist folgendes:
lassen Platz = Platz (Titel: Titel, Untertitel: Untertitel, koordinieren: CLLocationCoordinate2DMake (Breite, Länge))
Wenn I print(place)
es gibt die seltsamen Ergebnisse zurück
Soll ich diese Frage erneut als Duplikat markieren? Hast du die verlinkte Frage in deinem vorherigen gelesen? Es ist nicht mit der Swift-Version verwandt. Sie können in einer beliebigen Version von Swift keine Daten von einer Methode zurückgeben, die eine asynchrone Aufgabe enthält. Der Grund für das * seltsame * Druckergebnis ist, dass Ihre 'Place' Klasse keine' description' Eigenschaft hat, so dass Sie nur die Zeigeradresse erhalten. – vadian
Tut mir leid, @vadian, aber ich habe genau das gleiche mit einem Plist versucht und es hat perfekt funktioniert, also warum sollte es nicht mit einem externen Json arbeiten? – Tom
Noch einmal, 'DataTask' funktioniert ** asynchron ** – vadian