2014-10-09 85 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