2017-10-14 4 views
1

Ich versuche, den Anmerkungen auf meiner Karte Breiten- und Längengrad hinzuzufügen. Meine Daten JSON TypKonvertieren von NSNumber in Double (CLLocationDegrees)

"{\"lat\": 25.0437396, \"lng\": 121.5308224}" 

ich es in einem Wörterbuch ersten

["lat": 25.0437396, "lng": 121.5308224] 

und verwenden Sie den Wert im Wörterbuch verwandeln

var coordinate = CLLocationCoordinate2D() 
let latNum = shopCoordinate["lat"] as! NSNumber 
let lngNum = shopCoordinate["lng"] as! NSNumber 
let lat = latNum as? Double 
let lng = lngNum as? Double 
coordinate.latitude = lat! 
coordinate.longitude = lng! 

Aber der Typ Double-Wert würde hinzufügen werden wie dies und zeigen nicht auf Karte

25.043739599999999, 121.53082240000001 

Ich kann es stattdessen nicht in einen anderen Typ umwandeln, da CLLocationDegrees einen doppelten Typ akzeptiert. Es macht mich verrückt. Wenn jemand mir einen Rat geben könnte, würde ich es wirklich sehr schätzen.

Antwort

0

Warum nicht einfach direkt in eine Double konvertieren?

if let latNum = shopCoordinate["lat"] as? Double, let lngNum = shopCoordinate["lng"] as? Double { 
    let coordinate = CLLocationCoordinate2D(latitude: latNum, longitude: lngNum) 
} 
+0

Danke. Ihr Code ist eleganter als meiner. – Satty

0

Sie sind fast da. Sie müssen nur Ihre Daten in Double werfen und nicht NSNumber, etwa so:

var coordinate = CLLocationCoordinate2D() 
let lat = shopCoordinate["lat"] as! Double 
let lng = shopCoordinate["lng"] as! Double 
coordinate.latitude = lat 
coordinate.longitude = lng 
+0

Ich machte mir Sorgen um die Genauigkeit nach dem Casting. Danke, dass du es aufgezeigt hast. – Satty

+0

@Satty 25.043739599999999 es ist das gleiche wie 25.0437396 –

Verwandte Themen