我试图将包含人物属性的字典添加到数组中,但它无法正常工作。我收到以下错误:
[(Any)] is not identical to UInt8
这是我的代码:
var people = [Any]()
class Database {
class func addPerson(dict: [String : Any]) -> Void {
people += dict
}
}
Database.addPerson(["name" : "Fred"])
答案 0 :(得分:3)
+=
上的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)])
答案 1 :(得分:1)
我猜没有内置运算符。您可以使用:
people.append(dict)
// or
people += [dict as Any]