(字符串:AnyObject)没有名为 'subscript' 的成员
(String: AnyObject) does not have a member named 'subscript'
我遇到过类似的问题,但仍然不明白为什么我的代码会抛出错误。
var dict = [String:AnyObject]()
dict["participants"] = ["foo", "bar"]
dict["participants"][0] = "baz"
错误在第 3 行:(String: AnyObject) does not have a member named 'subscript'
我正在将 participants
键设置为一个数组,然后尝试更新它的第一个元素,但没有成功。出于示例目的,上面的代码被缩短了,但我使用 [String:AnyObject]
因为它不仅是存储在字典中的数组。
这可能是一件非常微不足道的事情,但我对 Swift 还是个新手。提前感谢您的帮助!
错误消息会准确告诉您问题出在哪里。您的字典值被键入为 AnyObject。我知道你知道这个值是一个字符串数组,但是Swift不知道;它只知道你告诉它什么,这是一个 AnyObject。但是 AnyObject 不能被下标(事实上,你根本不能用它做很多事情)。如果你想使用下标,你需要告诉 Swift 这不是 AnyObject 而是某种数组(这里是字符串数组)。
还有第二个问题,即 dict["participants"]
实际上甚至不是 AnyObject - 它是一个 Optional 包装 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
专家额外内容:如果你想酷得令人厌恶并且Swifty(谁不想呢??),你可以执行突变和使用定义和调用匿名函数一步赋值,如下所示:
var dict = [String:AnyObject]()
dict["participants"] = ["foo", "bar"]
dict["participants"] = {
var arr = dict["participants"] as [String]
arr[0] = "baz"
return arr
}()
我遇到过类似的问题,但仍然不明白为什么我的代码会抛出错误。
var dict = [String:AnyObject]()
dict["participants"] = ["foo", "bar"]
dict["participants"][0] = "baz"
错误在第 3 行:(String: AnyObject) does not have a member named 'subscript'
我正在将 participants
键设置为一个数组,然后尝试更新它的第一个元素,但没有成功。出于示例目的,上面的代码被缩短了,但我使用 [String:AnyObject]
因为它不仅是存储在字典中的数组。
这可能是一件非常微不足道的事情,但我对 Swift 还是个新手。提前感谢您的帮助!
错误消息会准确告诉您问题出在哪里。您的字典值被键入为 AnyObject。我知道你知道这个值是一个字符串数组,但是Swift不知道;它只知道你告诉它什么,这是一个 AnyObject。但是 AnyObject 不能被下标(事实上,你根本不能用它做很多事情)。如果你想使用下标,你需要告诉 Swift 这不是 AnyObject 而是某种数组(这里是字符串数组)。
还有第二个问题,即 dict["participants"]
实际上甚至不是 AnyObject - 它是一个 Optional 包装 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
专家额外内容:如果你想酷得令人厌恶并且Swifty(谁不想呢??),你可以执行突变和使用定义和调用匿名函数一步赋值,如下所示:
var dict = [String:AnyObject]()
dict["participants"] = ["foo", "bar"]
dict["participants"] = {
var arr = dict["participants"] as [String]
arr[0] = "baz"
return arr
}()