2015-08-24 119 views
2

試圖創建一個不可變的詞典。我們的想法是具有鍵和各值的不可變的陣列,然後將它們傳遞給一個Swift 2.0 beta詞典擴展

Dictionary constructor: let dict = Dictionary(aStringArray, aSameLengthDoubleArray)

然而下面的代碼給出了一個編譯時間錯誤。

extension Dictionary { 
    init<T:Hashable,U>(keys: [T], values: [U]) { 
     self.init() 
     for (index, key) in keys.enumerate() { 
      self[key] = values[index] 
     } 
    } 
} 

錯誤:

error: cannot subscript a value of type 'Dictionary' with an index of type 'T' self[key] = values[index]

可有人扔一些輕的呢?

回答

6

如果您知道詞典已經爲其關聯的鍵類型值和值進行了類型別名。密鑰應該是密鑰,值應該是。就像你會有元素鍵入陣列。上面的東西,你可以簡單地使用Key和Value來實現,

extension Dictionary { 
    init(keys: [Key], values: [Value]) { 
     self.init() 
     for (index, key) in keys.enumerate() { 
      self[key] = values[index] 
     } 
    } 
} 
let a = Dictionary(keys: [1, 2, 3, 4, 5], values: ["Michael", "Jack", "Kurt", "Jim", "Stewart"]) 
+0

Thanks GeneratorOfOne!你的回答也幫助我理解泛型類型與泛型函數。 – adev