построить структуру с множеством массивов - PullRequest
0 голосов
/ 11 мая 2018

У меня есть 21 массив, разделенный на алфавит (artistaA, 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
}

enter image description here

1 Ответ

0 голосов
/ 11 мая 2018

Во-первых, неясно, почему вы храните эти данные раздельно. 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)

Это объединяет два массива и строит их за один шаг.

...