arrays - 在 swift 中调用实例方法 'append' 时没有完全匹配

标签 arrays swift

试图将两个模型合并或合并为一个模型 第一个模型 = 项目 [ InboxModel]。 (我自己的收件箱) 第二个模型 = items2 [MoInboxModel](SDK 收件箱)

第一 + 第二 -> 组合项

private var items: [InboxModel] = []
private var items2: [MoInboxModel] = []
private var combinedItems: [combinedInboxModel] = []

struct InboxModel {
    let id: String
    let title: String
    let message: String
    let date: Date
}

struct MoInboxModel {
    let id: String
    let title: String
    let message: String
    let date: Date
}

struct combinedInboxModel {
    let id: String
    let title: String
    let message: String
    let date: Date
}

self?.combinedItems.append(self?.items). //No exact matches in call to instance method 'append
self?.combinedItems.append(contentsOf: self?.items2 ?? []) //No exact matches in call to instance method 'append

为什么合并的时候会出错?如何正确合并?

最佳答案

您有三个不相关的类型 - InboxModelMoInboxModelcombinedInboxModel(应该是 CombinedInboxModel。即使它们都有同名的属性,它们是不同的类型。

接受InboxModelMoInboxModel 数组的combinedInboxModel 数组上没有append 函数。

您可以在两个输入数组中的每一个上使用 map 将它们转换为 CombinedInboxModel 数组,然后您可以将其放入 combinedItems .

大概您是在一个闭包中编写这段代码,这就是您有一个弱 self 的原因。最好先处理它,然后再处理您的数组。

guard let self = self else {
    return
}

self.combinedItems = self.items.map { CombinedInboxModel(id:$0.id,title:$0.title,message:$0.message,date:$0.date) }

let items2 = self.items2.map { CombinedInboxModel(id:$0.id,title:$0.title,message:$0.message,date:$0.date) }

self.combinedItems.append(contentsOf:items2)

您还没有显示itemsitems2 来自哪里;是否可以只将它们作为同一结构的实例来获取?

关于arrays - 在 swift 中调用实例方法 'append' 时没有完全匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71645384/

相关文章:

php - 合并关联数组值 php

c++ - 为什么这些数组在本地时起作用,而在全局时却不起作用?

swift - 如何获取 user_profile 的引用并将其添加到 Syncano

ios - Firebase 数据库中的 PhotoUrl 在 CoverFlow 中显示

c - 通过引用传递 int/char 数组的错误/警告

javascript - 使用自定义顺序对字符串数组进行排序

swift - 避免重复属性方法

ios - 获取特定通知在通知中心被点击或首次出现时被点击的标识符

swift - 暂停辅助技术 - VoiceOver

Javascript列表像数据结构?