2016-04-16 17 views
7

Wie sollte das folgende Array eingestellt werden? Ich versuche, mehrere Anmerkungen auf meiner Karte hinzuzufügen. Ich war in der Lage, den Code unten auf stackoverflow zu finden, aber sie zeigten nicht, wie man das Array aufstellt.So richten Sie ein Array für Mehrfachanmerkungen mit swift ein

var objects = [ 
       //how should the array be setup here 
       ] 

for objecters in objects!{ 
    if let latit = objecters["Coordinates"]["Latitude"]{ 
     self.latitudepoint = latit as! String 
     self.map.reloadInputViews() 
    } 
    else { 
     continue 
    } 
    if let longi = objecters["Coordinates"]["Longitude"]{ 
     self.longitudepoint = longi as! String 
     self.map.reloadInputViews() 
    } 
    else { 
     continue 
    } 
    var annotation = MKPointAnnotation() 
    var coord = CLLocationCoordinate2D(latitude: Double(self.latitudepoint)!,longitude: Double(self.longitudepoint)!) 
    mapView.addAnnotation(annotation) 
} 
+0

Anstatt diesen Code zurückzuentwickeln (sein Objektarray scheint ein Array von Wörterbüchern zu sein, von denen jedes eine 'Koordinaten'-Taste hat, deren Wert ein weiteres Wörterbuch mit den Schlüsseln' Latitude' und 'Longitude' ist), ist die wirkliche Frage, was _ihr_ Das Modell sieht wie folgt aus und wir zeigen Ihnen, wie Sie die Anmerkungen zu Ihrer Karte hinzufügen können. Versuchen Sie jedoch nicht, Ihr Modell in diesem Code nachzurüsten, sondern schreiben Sie Code, der zu Ihrem Modell passt. (Nebenbei, dieser Codeausschnitt ist nicht sehr gut geschrieben und hat Probleme, so würde ich zögern, ihn überhaupt zu benutzen.) – Rob

+0

Danke für die Antwort rob. Jedes Array sollte 3 Elemente Breite, Länge und String enthalten. Ich möchte die Koordinaten verwenden, um die Annotationen zu plotten, und wenn die Annotation vom Benutzer angeklickt wird, wird die Zeichenkette angezeigt und wenn die Zeichenkette angetippt wird, öffnet sie einen anderen View-Controller, der Zugriff auf die Zeichenkette –

Antwort

19

Sie zum Beispiel tun könnte:

let locations = [ 
    ["title": "New York, NY", "latitude": 40.713054, "longitude": -74.007228], 
    ["title": "Los Angeles, CA", "latitude": 34.052238, "longitude": -118.243344], 
    ["title": "Chicago, IL",  "latitude": 41.883229, "longitude": -87.632398] 
] 

for location in locations { 
    let annotation = MKPointAnnotation() 
    annotation.title = location["title"] as? String 
    annotation.coordinate = CLLocationCoordinate2D(latitude: location["latitude"] as! Double, longitude: location["longitude"] as! Double) 
    mapView.addAnnotation(annotation) 
} 

Oder alternativ einen benutzerdefinierten Typ verwendet werden, zB:

struct Location { 
    let title: String 
    let latitude: Double 
    let longitude: Double 
} 

let locations = [ 
    Location(title: "New York, NY", latitude: 40.713054, longitude: -74.007228), 
    Location(title: "Los Angeles, CA", latitude: 34.052238, longitude: -118.243344), 
    Location(title: "Chicago, IL",  latitude: 41.883229, longitude: -87.632398) 
] 

for location in locations { 
    let annotation = MKPointAnnotation() 
    annotation.title = location.title 
    annotation.coordinate = CLLocationCoordinate2D(latitude: location.latitude, longitude: location.longitude) 
    mapView.addAnnotation(annotation) 
} 

Oder Sie können ersetzen, dass for Schleife mit map:

let annotations = locations.map { location -> MKAnnotation in 
    let annotation = MKPointAnnotation() 
    annotation.title = location.title 
    annotation.coordinate = CLLocationCoordinate2D(latitude: location.latitude, longitude: location.longitude) 
    return annotation 
} 
mapView.addAnnotations(annotations) 
+0

perfekt gibt ich suchte. Danke für die tolle Hilfe –

+0

Nein, danke sind nötig. Ich bemerke, dass du anscheinend keine Antworten auf deine Fragen akzeptierst. Siehe [Was soll ich tun, wenn jemand meine Frage beantwortet?] (Http://stackoverflow.com/help/someone-answers) Ich schlage vor, dass Sie nicht nur in Erwägung ziehen, diese Antwort zu akzeptieren, sondern auch Ihre alten Fragen zu beantworten und zu sehen, ob Da gibt es irgendwelche Antworten, die Sie hätten annehmen sollen. – Rob

+1

Ich habe nie gewusst, dass ich akzeptiert werden musste, aber ich habe einfach deine Antwort gemacht. Ich gehe zurück zu all meinen anderen Fragen und wähle die Antwort aus, die für mich funktioniert –

Verwandte Themen