2015-02-08 9 views
8

स्विफ्ट में एनएसएमयूटेबलएरे के माध्यम से कैसे आईपॉप कर सकते हैं? मैं क्या कोशिश की है:स्विफ्ट में एनएसएमयूटेबलएरे के माध्यम से लूपिंग

var vehicles = NSMutableArray() 

सरणी वर्ग से वस्तुओं में शामिल हैं: Vehicle

for vehicle in vehicles { 
    println(vehicle.registration) 
} 

मैं संकलक मुझे बता registrationAnyObject से संबंधित नहीं है बिना ऊपर कोड नहीं चल सकता। इस बिंदु पर मैंने माना कि ऐसा इसलिए था क्योंकि मैंने लूप को नहीं बताया था कि किस प्रकार की कक्षा item संबंधित है।

for vehicle: Vehicle in vehicles { 
    println(vehicle.registration) 
} 

अब संकलक downcasting के बारे में शिकायत ... कैसे मैं बस वाहन की सरणी के माध्यम से पाशन जबकि कस्टम पंजीकरण संपत्ति में पहुँच प्राप्त कर सकते हैं: तो मैं कोड के द्वारा संशोधित किया?

+0

इस मदद करता है? http://dev.eltima.com/post/96538497489/convert-nsmutablearray-to-swift-array –

उत्तर

23

यह काम करना चाहिए:

for vehicle in (vehicles as NSArray as! [Vehicle]) { 
    println(vehicle.registration) 
} 
+0

और एनएसएमयूटेबलएरे के लिए इसे कैसे करें? –

+0

रोब का जवाब बेहतर है: जब आपको आवश्यकता नहीं है तो वैकल्पिक क्यों मजबूर करें? –

3

NSMutableArray उद्देश्य-सी दुनिया से आता है। अब आप इस तरह जेनरिक और दृढ़ता से टाइप सरणियों, उपयोग कर सकते हैं:

var vehicles = [Vehicle]() 
... 
for vehicle in vehicles { 
    println(vehicle.registration) 
} 
+0

आपके उत्तर के लिए धन्यवाद! क्या मैं आपके 'वाहन 'सरणी पर' removeObjectsAtIndexes' विधि का उपयोग करने में सक्षम हूं? मैं एक एनएसएआरएआर को एक सरणी में परिवर्तित कर रहा हूं जो मुझे अपने ऐप में तकनीकी कारणों के लिए उपयोग करने की अनुमति देता है ... जब तक आपका उत्तर सही काम करता है – jskidd3

+0

निश्चित है। स्विफ्ट एरे इस विधि को मूल रूप से प्रदान नहीं करते हैं, लेकिन आप बिना किसी परेशानी के अपने आप को कोड कर सकते हैं: http://stackoverflow.com/questions/26173565/removeobjectsatindexes-for-swift-arrays (सबसे अधिक उत्थान वाले उत्तर को देखें, यह है स्वीकार नहीं किया गया लेकिन सबसे मान्य एक नहीं) – Romain

11

रूप रोमेन का सुझाव दिया, आप स्विफ्ट सरणी का उपयोग कर सकते हैं। आप NSMutableArray उपयोग करने के लिए जारी रखते हैं, तो आप या तो कर सकता है: या

for vehicle in vehicles { 
    print((vehicle as! Vehicle).registration) 
} 

, के रूप में DNagy सुझाव: यदि आप जानते हैं कि यह केवल Vehicle वस्तुओं है

for object in vehicles { 
    if let vehicle = object as? Vehicle { 
     print(vehicle.registration) 
    } 
} 

या,, आप इसे खोलने के लिए मजबूर कर सकते हैं

for vehicle in vehicles as NSArray as! [Vehicle] { 
    print(vehicle.registration) 
} 

जाहिर है, यदि संभव हो तो, सवाल यह है कि आप रिटायर कर सकते हैं NSMutableArray और इसके बजाय Array<Vehicle> (उर्फ [Vehicle]) का उपयोग करें। तो, के बजाय:

let vehicles = NSMutableArray() 

आप कर सकते हैं:

var vehicles = [Vehicle]() 

उसके बाद, आप की तरह कर सकते हैं:

for vehicle in vehicles { 
    print(vehicle.registration) 
} 

कभी कभी हम ऑब्जेक्टिव-सी कोड है कि लौटा रहा है के साथ फंस रहे हैं NSMutableArray ऑब्जेक्ट्स, लेकिन अगर NSMutableArray स्विफ्ट में बनाया गया था, तो संभवतः Array<Vehicle> का उपयोग करना बेहतर है।

संबंधित मुद्दे