arrays - 如何使用 Swift 将字典添加到数组?

标签 arrays dictionary swift

我正在尝试将包含人员属性的字典添加到数组中,但它不起作用。我收到以下错误:

[(Any)] 与 UInt8 不同

这是我的代码:

var people = [Any]()

class Database {
    class func addPerson(dict: [String : Any]) -> Void {
        people += dict
    }
}

Database.addPerson(["name" : "Fred"])

最佳答案

Array 上的 += 运算符对应于 Array.extend,它采用 SequenceType 而不是单独的元素。如果将 dict 包装在 Array 中,则 += 将起作用:

people += [dict]

但是,使用 append 函数更简单并且可能更有效:

people.append(dict)

旁注:

我不确定您为什么使用 Any 作为 Array 的元素类型和 Dictionary 的值类型 (也许你有充分的理由),但你通常应该尽可能避免这种情况。在这种情况下,我会将 dict 声明为 [String: String] 并将 people 声明为 [[String: String]]:

var people = [[String: String]]()

class Database {
    class func addPerson(dict: [String : String]) -> Void {
        people.append(dict)
    }
}

Database.addPerson(["name" : "Fred"])

如果您需要能够在您的 Dictionary 中存储多种类型,有几种方法可以做到这一点。

  1. 直接使用 NSDictionary
  2. Dictionary 声明为 [String: AnyObject]
  3. 使用enum with associated values作为值类型(如果您只需要支持少数类型,因为一切都保持强类型,这通常是 Swift 中的最佳选择)

使用 enum 的快速示例(在其他 SO 问题中有很多这种技术的示例):

enum DictValue {
    case AsString(String)
    case AsInt(Int)
}

var people = [[String: DictValue]]()

class Database {
    class func addPerson(dict: [String : DictValue]) -> Void {
        people.append(dict)
    }
}

Database.addPerson(["name" : DictValue.AsString("Fred")])
Database.addPerson(["name" : DictValue.AsInt(1)])

关于arrays - 如何使用 Swift 将字典添加到数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26388880/

相关文章:

C++:通过引用传递(指向?)对象数组

php - 帮助我使用 usort() 对这个 php 数组进行排序

python - 如何检查两个列表的元素组合是否存在于第三个列表中?

python - 改进 for 循环 - 尝试比较 2 个字典列表

scala - 使用重复键将对象列表转换为 map

swift - 在 Swift 中连接字符串和整数

php - 哪个 PHP 接口(interface)允许使用数组表示法访问对象的属性?

python - Pandas 按一天中的小时分组到字典

swift - 枚举类的初始化和将TemperatureUnit.Kelvin分配给self(self = .Kelvin)的困惑

ios - 在完成处理程序中执行 Segue