我经历过类似的问题,但仍然不明白为什么我的代码会抛出错误.
var dict = [String:AnyObject]()
dict["participants"] = ["foo", "bar"]
dict["participants"][0] = "baz"
Run Code Online (Sandbox Code Playgroud)
错误在第3行: (String: AnyObject) does not have a member named 'subscript'
我正在设置participants一个数组的键,然后尝试更新它的第一个元素,没有任何运气.上面的代码是为了示例目的缩短,但我使用的[String:AnyObject]是因为它不仅是存储在字典中的数组.
这可能是非常微不足道的事情,但我仍然是Swift的新手.在此先感谢您的帮助!
mat*_*att 20
错误消息可以准确地告诉您问题所在.您的字典值键入AnyObject.我知道你知道这个值是一个字符串数组,但Swift并不知道; 它只知道你告诉它的东西,这是一个AnyObject.但AnyObject无法下标(事实上,你根本无法做到这一点).如果你想使用下标,你需要告诉Swift这不是AnyObject而是某种类型的数组(这里是一个String数组).
然后有第二个问题,dict["participants"]实际上甚至不是AnyObject - 它是一个可选的包装AnyObject.因此,您必须打开它并将其转换为下标.
然后是第三个问题,即你不能在字典中改变数组值.您必须提取值,对其进行修改,然后替换它.
所以,你的整个代码将如下所示:
var dict = [String:AnyObject]()
dict["participants"] = ["foo", "bar"]
var arr = dict["participants"] as [String] // unwrap the optional and cast
arr[0] = "baz" // now we can subscript!
dict["participants"] = arr // but now we have to write back into the dict
Run Code Online (Sandbox Code Playgroud)
额外的专家:如果你想变得很酷和Swifty(谁没有?),你可以通过使用一个定义和调用匿名函数一次执行变异和赋值,如下所示:
var dict = [String:AnyObject]()
dict["participants"] = ["foo", "bar"]
dict["participants"] = {
var arr = dict["participants"] as [String]
arr[0] = "baz"
return arr
}()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15904 次 |
| 最近记录: |