2014-10-09 87 views
1

我在Swift擴展中工作。我試圖將數據追加到類型爲[[String: AnyObject]]的數組。這是擴展的原因是因爲我必須做很多次的數組。問題是,當我追加一個類型爲:[String: AnyObject]的對象時,出現錯誤:Dictionary'<'String, AnyObject'>' Not Convertible to T(引號存在,因爲在胡蘿蔔內沒有任何顯示)。Swift [String:AnyObject]不可轉換爲T Swift數組

mutating func appendData(data: [String: [String: AnyObject]]?) { 
    if data != nil { 
     for (id, object) in data! { 
      var mutatingObject = object 
      mutatingObject["id"] = id 
      append(mutatingObject) 
     } 
    } 
} 
+0

「的原因,這是一個擴展是因爲我必須做的時候,這大量的以陣列的很多的。」請注意,如果你在很多數組中使用'AnyObject',你很可能在Swift中做錯了。 'AnyObject'偶爾是必需的,但是你應該儘快將這些數組和字典轉換爲具體類型(通常是結構體),然後與這些類型一起工作。圍繞'AnyObject'和鍵/值字典的邏輯非常迅速地變得非常複雜和容易出錯。 – 2014-10-09 21:20:10

回答

1

我不確定你到底想要達到什麼目的。但要注意 - 數組是存儲特定類型的通用集合。 Array的擴展可能不知道每種情況下將使用哪種類型,因此它不能簡單地允許您存儲Dictionary<String, AnyObject>

下面是關於如何使你的代碼更通用的例子:

extension Array { 
    mutating func appendData(data: [String: T]?) { 
     if data != nil { 
      for (id, object) in data! { 
       if var mutatingObject = object as? [String : AnyObject] { 
        mutatingObject["id"] = id 
       } 

       append(object) 
      } 
     } 
    } 
} 
+0

那麼通過編輯mutatingObject來更新'object'? – jamespick 2014-10-09 23:08:52