2016-04-16 9 views
7

के साथ बहु एनोटेशन के लिए सरणी कैसे सेट अप करें नीचे दिए गए सरणी को कैसे सेट किया जाना चाहिए। मैं अपने मानचित्र पर कई एनोटेशन जोड़ने की कोशिश कर रहा हूं। मैं स्टैक ओवरफ्लो पर नीचे दिए गए कोड को खोजने में सक्षम था लेकिन उन्होंने यह नहीं दिखाया कि सरणी कैसे सेट अप करें।स्विफ्ट

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

इस कोड को रिवर्स इंजीनियरिंग के बजाय (उसकी ऑब्जेक्ट सरणी शब्दकोशों की एक सरणी प्रतीत होती है जिनमें से प्रत्येक में 'कोऑर्डिनेट्स' कुंजी होती है जिसका मूल्य अभी तक एक और शब्दकोश है जिसमें कुंजी अक्षांश 'अक्षांश' और 'रेखांश' है), असली सवाल यह है कि _your_ मॉडल जैसा दिखता है और हम आपको दिखाते हैं कि आपके मानचित्र में एनोटेशन कैसे जोड़ें। लेकिन इस मॉडल में अपने मॉडल को फिर से निकालने का प्रयास न करें, लेकिन चलिए आपके मॉडल को फिट करने वाले कोड लिखें। (एक तरफ के रूप में, यह कोड स्निपेट बहुत अच्छी तरह से लिखा नहीं गया है और इसमें समस्याएं हैं, इसलिए मैं इसका उपयोग करने में संकोच करूंगा।) – Rob

+0

उत्तर लूट के लिए धन्यवाद। प्रत्येक सरणी में 3 आइटम अक्षांश, देशांतर और स्ट्रिंग होना चाहिए। मैं एनोटेशन प्लॉट करने के लिए निर्देशांक का उपयोग करना चाहता हूं और जब उपयोगकर्ता द्वारा एनोटेशन टैप किया जाता है तो स्ट्रिंग दिखाई देगी और यदि स्ट्रिंग टैप की जाती है तो यह स्ट्रिंग –

उत्तर

19

तुम कर सकते हो, उदाहरण के लिए:

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

या, वैकल्पिक रूप से, एक कस्टम प्रकार का उपयोग करें, जैसे:

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

या आप की जगह ले सकता है कि map साथ for पाश:

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

स्ट्रिंग का पुन: उपयोग करने के लिए एक अलग दृश्य नियंत्रक खोल देगा जो बिल्कुल सही है मुझे इसकी तलाश थी। महान मदद के लिए धन्यवाद –

+0

कोई धन्यवाद आवश्यक नहीं है। मुझे लगता है कि आप अपने सवालों के जवाब स्वीकार नहीं कर रहे हैं, हालांकि। देखें [जब कोई मेरे प्रश्न का उत्तर देता है तो मुझे क्या करना चाहिए?] (Http://stackoverflow.com/help/someone-answers) मैं आपको सुझाव दूंगा कि आप न केवल इस जवाब को स्वीकार करने पर विचार करें, बल्कि अपने पुराने प्रश्नों के माध्यम से वापस जाएं और देखें कि क्या वहां कोई जवाब है कि आपको स्वीकार करना चाहिए था। – Rob

+1

मुझे कभी एहसास नहीं हुआ कि मुझे स्वीकार करना पड़ा था, लेकिन मैंने अभी आपके जवाब में किया है, मैं अपने सभी अन्य सवालों पर वापस जाउंगा और मेरे लिए काम करने वाले उत्तर का चयन कर रहा हूं –