我正在尝试执行以下操作,但似乎是不可接受的操作。也许我遗漏了一些基本的语言。
var foo:NSArray = []
var bar = ["name":"jake"]
foo = [bar]
foo[0]["name"] = "Fred"
最后一行抛出错误说'@lvalue $T8' is not identical to 'AnyObject!'
swift中不允许这种事情吗?如果是这样,那么如何实现这一目标。
答案 0 :(得分:1)
你必须以正确的方式宣布foo。作为字典数组:
var foo:[[String:AnyObject]] = []
var bar = ["name":"jake"]
foo = [bar]
foo[0]["name"] = "Fred"
foo // [["name": "Fred"]]
答案 1 :(得分:0)
当您使用foo[0]
取消引用时,返回类型为AnyObject
。类型AnyObject
没有subscript
运算符。使用
(foo[0] as! [String:String])["name"]
或者,如果您的数组只包含字典,则使用以下命令定义:
var foo : [[String:String]] = []
以下是一个例子:
$ swift
Welcome to Swift version 1.2. Type :help for assistance.
1> var foo : [[String:String]] = []
foo: [[String : String]] = 0 values
2> var bar : [String:String] = ["name":"jake"]
3.
bar: [String : String] = {
[0] = {
key = "name"
value = "jake"
}
}
3> foo = [bar]
4> foo[0]["name"]
$R0: String? = "jake"