定义没有类型的字典会在Swift中产生编译错误

时间:2015-05-03 19:21:45

标签: swift data-structures

我不知道提前的数据类型,如何在没有类型的情况下将数据添加到空字典中。看起来有人在这里问了同样的问题,但没有接受答案How to create Dictionary that can hold anything in Key? or all the possible type it capable to hold

Swift编译器错误:

  

无法指定此表达式的结果。

我在b["test"] = 23此行中收到此错误。

var a = [String:Int]()
a["test"] = 23  # Works 


var b = [:]
b["test"] = 23 # Compiler Error

3 个答案:

答案 0 :(得分:1)

在您的示例中,b的类型为NSDictionary,这是不可变的。因此,在尝试修改其内容时会出错。

您需要将b声明为NSMutableDictionary才能使其发挥作用:

let dictionary: NSMutableDictionary = [:]
dictionary["key"] = "value" // No errors.

答案 1 :(得分:1)

您也可以将第二个字典声明为Swift字典,但使用AnyObject作为值类型:

var b = [String:AnyObject]()

然后你可以这样做:

b["test"] = 23
b["stuff"] = "hello world"

此值的类型为AnyObject,因此您必须在检索它时将其强制转换:

let result = b["test"] as! Int
let sentence = b["stuff"] as! String

if let result = b["test"] as? Int {
    // use result (23)
}
if let sentence = b["stuff"] as? String {
    // use sentence ("hello world")
}

答案 2 :(得分:1)

var b:[NSObject:AnyObject] = [:]
b["test"] = 23
b[1] = "one"
b // ["test": 23, 1: "one"]