2015-07-16 12 views
12

मैं Xcode 6.4स्विफ्ट सरणी अनुक्रमित

उपयोग कर रहा हूँ मैं UIViews की एक सरणी है और मैं कुंजी "v0", "v1"... के साथ एक शब्दकोश को परिवर्तित करना चाहते हैं के साथ शब्दकोश में बदलें। इस तरह:

var dict = [String:UIView]() 
for (index, view) in enumerate(views) { 
    dict["v\(index)"] = view 
} 
dict //=> ["v0": <view0>, "v1": <view1> ...] 

यह काम करता है, लेकिन मैं इसे और अधिक कार्यात्मक शैली में करने की कोशिश कर रहा हूं। मुझे लगता है कि यह मुझे परेशान करता है कि मुझे dict चर बनाना है। मैं enumerate() उपयोग करने के लिए प्यार होता है और reduce() तो जैसे:

reduce(enumerate(views), [String:UIView]()) { dict, enumeration in 
    dict["v\(enumeration.index)"] = enumeration.element // <- error here 
    return dict 
} 

यह अच्छे लगता है, लेकिन मैं त्रुटि हो रही है: Cannot assign a value of type 'UIView' to a value of type 'UIView?' मैं इस अन्य वस्तुओं एक UIView (यानी: [String] -> [String:String]) के साथ की कोशिश की है और मैं एक ही मिलता है त्रुटि।

इसे साफ़ करने के लिए कोई सुझाव?

उत्तर

24

इस तरह का प्रयास करें:

reduce(enumerate(a), [String:UIView]()) { (var dict, enumeration) in 
    dict["\(enumeration.index)"] = enumeration.element 
    return dict 
} 

Xcode 8 • स्विफ्ट 2,3

extension Array where Element: AnyObject { 
    var indexedDictionary: [Int:Element] { 
     var result: [Int:Element] = [:] 
     for (index, element) in enumerate() { 
      result[index] = element 
     } 
     return result 
    } 
} 

Xcode 8 • स्विफ्ट 3,0

extension Array { 
    var indexedDictionary: [Int: Element] { 
     var result: [Int: Element] = [:] 
     enumerated().forEach({ result[$0.offset] = $0.element }) 
     return result 
    } 
} 
+0

मैं इस यह ठीक करता है विश्वास नहीं कर सकता ! क्या आपको कोई विचार है कि यह क्यों काम करता है? बंदरगाहों पर मैंने देखा है कि अधिकांश दस्तावेज पैरामीटर में 'var' छोड़ा है। – Adam

+0

dict डिफ़ॉल्ट रूप से स्थिर है। यदि आप इसे बदलना चाहते हैं तो आपको इसे चर के रूप में घोषित करने की आवश्यकता है। :) –

+1

आह, यह सही समझ में आता है। बहुत बहुत धन्यवाद, मैं इस पर आज रात बहुत लंबा रहा हूं :) – Adam

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