2016-04-16 13 views
7

Come deve essere impostato l'array sottostante. Sto cercando di aggiungere più annotazioni sulla mia mappa. Sono stato in grado di trovare il codice sottostante su StackOverflow ma non hanno mostrato come impostare la matrice.come impostare l'array per le annotazioni multiple con swift

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

Piuttosto che decodificare questo codice (la sua matrice di oggetti sembra essere un array di dizionari ognuno dei quali ha una chiave 'Coordinates' il cui valore è ancora un altro dizionario che ha le chiavi' Latitude' e 'Longitude'), la vera domanda è cosa _your_ il modello sembra e noi cn ti mostriamo come aggiungere le annotazioni alla tua mappa. Ma non provare ad aggiornare il tuo modello in questo codice, ma scriviamo il codice che si adatta al tuo modello. (Per inciso, questo frammento di codice non è scritto molto bene e ha problemi, quindi esiterei a usarlo del tutto.) – Rob

+0

Grazie per la risposta rob. Ogni array deve contenere 3 elementi di latitudine, longitudine e stringa. voglio usare le coordinate per tracciare le annotazioni e quando l'annotazione viene toccata dall'utente la stringa apparirà e se la stringa è tappata si aprirà un controller di visualizzazione diverso dando accesso a riutilizzare la stringa –

risposta

19

si potrebbe fare, ad esempio:

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) 
} 

O, in alternativa, utilizzare un tipo personalizzato, ad esempio:

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) 
} 

Oppure si può sostituire che for ciclo con 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

perfetto che è esattamente ciò che stavo cercando. Grazie per l'ottimo aiuto –

+0

No grazie sono necessari. Tuttavia, sembra che tu non sembri accettare le risposte alle tue domande. Vedi [Cosa devo fare quando qualcuno risponde alla mia domanda?] (Http://stackoverflow.com/help/someone-answers) Suggerirei di prendere in considerazione non solo di accettare questa risposta, ma di tornare indietro tra le vecchie domande e vedere se ci sono delle risposte là che dovresti aver accettato. – Rob

+1

Non ho mai realizzato che dovevo accettare ma ho appena fatto la tua risposta tornerò a tutte le mie altre domande e selezionando la risposta che ha funzionato per me –

Problemi correlati