swift – (String:AnyObject)没有名为“subscript”的成员

swift – (String:AnyObject)没有名为“subscript”的成员,第1张

概述我经历了类似的问题,但仍然不明白为什么我的代码抛出错误. var dict = [String:AnyObject]()dict["participants"] = ["foo", "bar"]dict["participants"][0] = "baz" 错误在第3行:(String:AnyObject)没有名为“subscript”的成员 我将参数键设置为数组,然后尝试更新其中的第一个元素 我经历了类似的问题,但仍然不明白为什么我的代码抛出错误.
var dict = [String:AnyObject]()dict["participants"] = ["foo","bar"]dict["participants"][0] = "baz"

错误在第3行:(String:AnyObject)没有名为“subscript”的成员

我将参数键设置为数组,然后尝试更新其中的第一个元素,而无需任何运气.上面的代码缩短了例子的目的,但我使用[String:AnyObject],因为它不仅是存储在字典中的数组.

这可能是一件非常简单的事情,但我仍然是Swift新手.感谢任何帮助提前!

错误信息告诉您确切的问题是什么.您的字典值键入为AnyObject.我知道你知道这个值是一个字符串数组,但Swift不知道;它只知道你告诉它,这是一个AnyObject.但AnyObject不能被下标(实际上,你根本不能做很多).如果你想使用下标,你需要告诉Swift这不是一个AnyObject,而是一个数组(这里是一个String数组).

那么还有一个第二个问题,那就是dict(“参与者”)事实上甚至不是AnyObject – 它是一个可选的包装AnyObject.所以你必须打开它并投下它才能下标.

那么还有一个第三个问题,那就是你不能在一个字典里面的数组值变异.您将必须提取该值,将其更改,然后替换它.

所以,你的整个代码将如下所示:

var dict = [String:AnyObject]()dict["participants"] = ["foo","bar"]var arr = dict["participants"] as [String] // unwrap the optional and castarr[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}()
总结

以上是内存溢出为你收集整理的swift – (String:AnyObject)没有名为“subscript”的成员全部内容,希望文章能够帮你解决swift – (String:AnyObject)没有名为“subscript”的成员所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1038236.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存