在Swift 3中将struct附加到Struct Array上

时间:2018-05-21 00:52:17

标签: arrays swift struct

我有一个结构:

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'

类型的不可变值使用变异成员

如何改变需要转换的值?

2 个答案:

答案 0 :(得分:1)

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

变化:

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

为:

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

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

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

但即使使用了所有这些"修复程序",如果您这样做,仍然会收到错误:

Contributors

(data[0] as! Note).append(Note(date: "06-06-2012",comment:"Created Note")) 包含两种不同类型的数据有点奇怪。你真的应该有两个数组:

data

然后你可以很容易地做到:

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

答案 1 :(得分:0)

您可以使用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 {

}