在 Swift 3 中将结构附加到结构数组上

Posted

技术标签:

【中文标题】在 Swift 3 中将结构附加到结构数组上【英文标题】:Appending struct onto Struct Array in Swift 3 【发布时间】:2018-05-21 00:52:16 【问题描述】:

我有一个结构:

struct Note
    var date: String;
    var comment: String;

然后我创建一个数组,其中嵌套了两个数组,

var data = [[Note()],[Contributors()]]

这两个数组用于填充表格视图的两个部分。 我需要将一个结构附加到 Notes 结构数组中,但是当我尝试使用

附加它时
data[0].append(Note(date: "06-06-2012",comment:"Created Note"))

(data[0] as! Note).append(Note(date: "06-06-2012",comment:"Created Note"))

抛出错误

不能对'Note'类型的不可变值使用变异成员

如何改变需要强制转换的值?

【问题讨论】:

您不需要附加新的Note AND Contributors(基于我的测试)-data.append([Note(data: "06-06-2012",comment:"Created Note"), [Contributors()]] 或类似的东西 【参考方案1】:

您最初创建的数组不正确。

变化:

var data = [[Note()],[Contributors()]]

到:

var data: [Any] = [[Note](),[Contributors]()]

您的代码创建了一个数组,该数组在索引 0 处包含一个 Any 数组,其中包含一个空的 Note 实例,在索引 1 处包含一个 Any 数组,其中包含一个空的 Contributors 实例。

此修复程序创建一个数组,该数组在索引 0 处包含一个空 Note 数组,在索引 1 处包含一个空 Contributors 数组。

但即使有所有这些“修复”,如果你这样做,你仍然会收到错误:

(data[0] as! Note).append(Note(date: "06-06-2012",comment:"Created Note"))

data 包含两种不同类型的数据有点奇怪。你真的应该有两个数组:

var notes = [Note]()
var contributors = [Contributors]()

那么你就可以轻松做到了:

notes.append(Note(date: "06-06-2012",comment:"Created Note"))

【讨论】:

【参考方案2】:

您可以使用protocol获得解决方案

protocol DataSourceNoteContributors 

struct Contributors: DataSourceNoteContributors


struct Note:DataSourceNoteContributors
    var date: String;
    var comment: String;

然后就可以轻松使用了

    var data = [Note(date: "date", comment: "comment"),Contributors()]

    data.append(Note(date: "note1", comment: "comment2"))
    data.append(Contributors())

// 使用强制转换识别

if data[0] as Note 


【讨论】:

以上是关于在 Swift 3 中将结构附加到结构数组上的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4 可解码 - 附加变量

在 Swift 中将模型附加到数组中

Visual Studio 调试中将结构体指针转换为结构体数组查看

在 C++ 中将某种结构化的文本文件读入数组

如何从 C 中将新的字符串元素附加到 Swift 中的数组

将嵌套结构中的数组附加到另​​一个嵌套结构中的另一个数组