我正在尝试将包含人员属性的字典添加到数组中,但它不起作用。我收到以下错误:
[(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
中存储多种类型,有几种方法可以做到这一点。
- 直接使用
NSDictionary
。 - 将
Dictionary
声明为[String: AnyObject]
。 - 使用
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/