2015-09-29 14 views
18

मैं कोड काम कर रहा था एक बटन के साथ सभी नक्शा एनोटेशन बाहर निकालना है, लेकिन xcode 7 करने के लिए मेरे अद्यतन के बाद मैं त्रुटि में चल रहा सारे नक्शा एनोटेशन बाहर निकालना है:मैं कैसे तेजी से 2

प्रकार 'MKAnnotation' नहीं है प्रोटोकॉल 'SequenceType'

if let annotations = (self.mapView.annotations as? MKAnnotation){ 
    for _annotation in annotations { 
     if let annotation = _annotation as? MKAnnotation { 
      self.mapView.removeAnnotation(annotation) 
     } 
    } 
} 

उत्तर

40

स्विफ्ट 2 annotations में के अनुरूप गैर वैकल्पिक सरणी [MKAnnotation] के रूप में घोषित किया जाता है ताकि आप आसानी से

let allAnnotations = self.mapView.annotations 
self.mapView.removeAnnotations(allAnnotations) 

लिख सकते हैं बिना किसी भी प्रकार कास्टिंग।

+0

अच्छा काम किया! धन्यवाद! – user4812000

13
self.mapView.removeAnnotations(self.mapView.annotations) 

यदि आप उपयोगकर्ता स्थान को हटाना नहीं चाहते हैं।

self.mapView.annotations.forEach { 
    if !($0 is MKUserLocation) { 
    self.mapView.removeAnnotation($0) 
    } 
} 

नोट: उद्देश्य-सी में अब जेनेरिक हैं, अब यह 'एनोटेशन' सरणी के तत्वों को आवश्यक नहीं है।

+0

मैं आपके कोड का उपयोग करना चाहता हूं लेकिन यह कहता है: अनपेक्षित रूप से शून्य पाया गया ... मुझे पता है इसका मतलब क्या है लेकिन मुझे नहीं पता कि कौन सा मूल्य शून्य है। – Lenny1357

0

मुद्दा यह है कि दो विधियां हैं। एक हटा दिया गया है नोटेशन जो एमकेएनोटेशन ऑब्जेक्ट लेता है, और दूसरा हटा दिया जाता है नोट्स जो एमकेएनोटेशन की सरणी लेता है, एक के अंत में "एस" को नोट करें और दूसरे को नहीं। [MKAnnotation] से कास्ट करने का प्रयास करते हुए, MKAnnotation पर एक सरणी एक ऑब्जेक्ट या वीज़ा बनाम प्रोग्राम को क्रैश कर देगी। कोड self.mapView.annotations की रेखा एक सरणी बनाता है।

let previousAnnotations = self.mapView.annotations 
if !previousAnnotations.isEmpty{ 
    self.mapView.removeAnnotation(previousAnnotations[0]) 
} 

इस प्रकार, आप विभिन्न एनोटेशन के साथ साथ उपयोगकर्ताओं स्थान रखने निकाल सकते हैं: इस प्रकार, यदि आप विधि removeAnnotation उपयोग कर रहे हैं, तो आप सूचकांक करने के लिए सरणी के भीतर एक वस्तु के लिए सरणी, जैसा कि नीचे देखा की जरूरत है। ऑब्जेक्ट्स को निकालने का प्रयास करने से पहले आपको हमेशा अपने सरणी का परीक्षण करना चाहिए, अन्यथा संभवतः सीमाओं या शून्य त्रुटि से बाहर निकलना संभव है।

नोट: विधि निकालने का उपयोग करके टिप्पणियां (सभी के साथ) सभी एनोटेशन हटा देती है। यदि आपको शून्य मिल रही है, तो इसका तात्पर्य है कि आपके पास खाली सरणी है। यदि आप ऐसा करने के बाद कोई और कथन जोड़कर सत्यापित कर सकते हैं, तो ऐसा ही;

else{print("empty array")} 
संबंधित मुद्दे