所以我试图把firebase中的值放到一个表中。因此,首先我把数据项添加到一个[Dictonary]类型的列表中
数据如下所示:
Posts:
P1 :
post data....
P2:
post data....
我正在使用的代码
let Posts: [Dictionary<String,Any>]! = nil
var dict = Postsnapshot?.value as? Dictionary<String, Dictionary<String, Any>>
Posts.append(contentsOf: dict.values)
我正在做类似的事情,但它抛出这个错误“没有确切的匹配调用示例方法'append'“。我已经尝试了每一个初始化器,甚至list.append(Dict),仍然是同样的错误。我该怎么办?
3条答案
按热度按时间jgwigjjp1#
你用大写字母来命名你的数组
Posts
,而你可能在某个地方用同样的名字声明了一个类型,这让编译器感到困惑。当然,你也需要把posts
变成var
,这样才能向它添加一些东西,因为let
使它不可变。编写这段代码的一种更简洁、更正确的方法是:
此外,请将
Postsnapshot
属性重命名为postsnapshot
,除非您实际上是在Postsnapshot
类型上调用静态属性。下面是一些学习如何设计Swift代码样式的资源:
但是要了解更多关于如何最有效地使用Swift的信息,我强烈建议你去看一下官方的Swift Language Guide,最好是完整地阅读一下。它的信息量非常大!
kmpatx3s2#
在数组中使用循环逐个追加值
例如
var帖子:[字典〈字符串,任何〉]!= nil
var dict = Postsnapshot?.value as?字典〈字符串,字典〈字符串,任意〉〉
瓦尔字典中的值{
}
vsdwdz233#
我发布这个答案是为了防止像我这样的人遇到这个问题,因为问题实际上不是
append
方法本身的问题,而是传递给append
方法的内容的问题。在我的例子中,我试图将一个新创建的结构体示例附加到该结构体的数组中。我应该提供给该结构体初始化器的参数之一是一个字符串。我无意中传入了一个枚举,而不是枚举的
rawValue
。由于我在同一行中创建对象并初始化结构体,因此出于某种原因,Xcode向我显示了问题中提到的错误。参数为货币。
我不得不将结构体的初始化与它对数组的添加分开,方法是先给一个变量赋值,然后将该变量追加到数组中,然后才能得到正确的错误消息。解决了这个问题后,我再次将其变为一行程序。