swift 对示例方法“append”的调用中没有完全匹配的项:雨燕

wfauudbj  于 2022-10-31  发布在  Swift
关注(0)|答案(3)|浏览(210)

所以我试图把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),仍然是同样的错误。我该怎么办?

jgwigjjp

jgwigjjp1#

你用大写字母来命名你的数组Posts,而你可能在某个地方用同样的名字声明了一个类型,这让编译器感到困惑。当然,你也需要把posts变成var,这样才能向它添加一些东西,因为let使它不可变。
编写这段代码的一种更简洁、更正确的方法是:

var posts: [Dictionary<String,Any>] = []
let dict = postsnapshot?.value as? Dictionary<String, Dictionary<String, Any>>
posts.append(contentsOf: Array(dict?.values ?? []))

此外,请将Postsnapshot属性重命名为postsnapshot,除非您实际上是在Postsnapshot类型上调用静态属性。
下面是一些学习如何设计Swift代码样式的资源:

但是要了解更多关于如何最有效地使用Swift的信息,我强烈建议你去看一下官方的Swift Language Guide,最好是完整地阅读一下。它的信息量非常大!

kmpatx3s

kmpatx3s2#

在数组中使用循环逐个追加值
例如
var帖子:[字典〈字符串,任何〉]!= nil
var dict = Postsnapshot?.value as?字典〈字符串,字典〈字符串,任意〉〉
瓦尔字典中的值{

Posts.append(val)

}

vsdwdz23

vsdwdz233#

我发布这个答案是为了防止像我这样的人遇到这个问题,因为问题实际上不是append方法本身的问题,而是传递给append方法的内容的问题。
在我的例子中,我试图将一个新创建的结构体示例附加到该结构体的数组中。我应该提供给该结构体初始化器的参数之一是一个字符串。我无意中传入了一个枚举,而不是枚举的rawValue。由于我在同一行中创建对象并初始化结构体,因此出于某种原因,Xcode向我显示了问题中提到的错误。

private var items: [Item] = []

func addItem(name: String, currency: Currency){ 
  items.append(
    Item(
      name: name, 
      currency: currency
    )
  )
}

参数为货币。
我不得不将结构体的初始化与它对数组的添加分开,方法是先给一个变量赋值,然后将该变量追加到数组中,然后才能得到正确的错误消息。解决了这个问题后,我再次将其变为一行程序。

let item = Item(
    name: name, 
    currency: currency
  )
items.append(item)

相关问题