Arrays 构建包含多个数组的结构

Arrays 构建包含多个数组的结构,arrays,swift,structure,Arrays,Swift,Structure,我有21个数组,除以字母表(Artista、artistaB等),代表艺术家,21个代表标题。 我想基于名为VociMontagna的结构构建一个独特的数组,但我遇到了一个错误。我的目标是将这个大阵列装箱,然后基于这个阵列生成一个TableView,以便使用过滤器。 我有800多个标题,所以我更喜欢将数组分开 代码如下: func creaListaCanzoni(){ var tot = 0 var a = 0 for _ in stride(f

我有21个数组,除以字母表(Artista、artistaB等),代表艺术家,21个代表标题。 我想基于名为VociMontagna的结构构建一个独特的数组,但我遇到了一个错误。我的目标是将这个大阵列装箱,然后基于这个阵列生成一个TableView,以便使用过滤器。 我有800多个标题,所以我更喜欢将数组分开

代码如下:

func creaListaCanzoni(){
        var tot = 0
        var a = 0
        for _ in stride(from: 0, to: titoliA.count , by: 1) {
            let voce = VociMontagna(titolo: titoliA[a], artista: artistaA[a])
            listaCanzoni.append(voce)
            a = a + 1
            tot = tot + 1
            print("Tot: \(a)--Nome: \(listaCanzoni[a].nomeTesto)")
        }
    }
结构如下:

import UIKit

struct VociMontagna {
    let titolo : String
    let artista : String
}

首先,不清楚为什么要将这些数据分开。800张唱片相当少。维护40多个阵列似乎非常复杂

你的错误是你数得太多了。最后一个索引是
titoliA.count-1
。索引从零开始。而不是这一行:

for _ in stride(from: 0, to: titoliA.count , by: 1) {
你是说:

for a in titolaA.indices {
整个函数如下所示:

func creaListaCanzoni(){
    for a in titolaA.indices {
        let voce = VociMontagna(titolo: titoliA[a], artista: artistaA[a])
        listaCanzoni.append(voce)
        print("Tot: \(a)--Nome: \(listaCanzoni[a].nomeTesto)")
    }
}
也就是说,如果您确实需要合并两个数组(我建议您不要这样做;只需将它们存储为单个结构数组),那么更好的工具是:

let listaCanzoni = zip(titoliA, artistaA).map(VociMontagna.init)

这将组合两个数组,并在一个步骤中构造出它们。

如果
listaCanzoni
一开始是空的,那么根据您的逻辑,它应该抛出一个错误,因为您在访问索引之前增加了访问索引。如果在索引递增之前将print语句移动到,则错误应该消失