Попытка зациклить массив объектов пользовательских классов - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть мод данных, который выглядит так:

class CurrencyModel {
    var currencyName = ""
    var currencyCode = ""
}

Я пытаюсь перебрать все эти объекты и создать массив currencyNames.

Вот как я пытаюсь это сделать:

var currencies = [CurrencyModel]()

override func viewWillAppear(_ animated: Bool) {
    for names in currencies{
        let name = currencies[names].currencyName
        namesArray.append(name)

        print(namesArray)
    }
}

Я получаю эту ошибку:

Невозможно добавить значение типа '[CurrencyModel] с индексом типа CurrencyModel

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

currencies - это [CurrencyModel] (массив CurrencyModel).

Цикл for names in currencies повторяет этот массив.names будет каждым отдельным CurrencyModel объектом в массиве.

Таким образом, строка:

let name = currencies[names].currencyName

должна быть:

let name = names.currencyName

Конечно, весьfor цикл можно заменить одной строкой:

let namesArray = currencies.map { $0.currencyName }
0 голосов
/ 12 сентября 2018

Проблема здесь

let name = currencies[names].currencyName

, поскольку currencies - это массив ([CurrencyModel]), для индексации ему необходимо целочисленное значение, например currencies[0], но вместо этого вы отправляете names, который равентип CurrencyModel

Вам нужно

var namesArray = [String]()
override func viewWillAppear(_ animated: Bool) {
  super.viewWillAppear(animated)
  namesArray = currencies.map{$0.currencyName}
}

ИЛИ

currencies.forEach { namesArray.append($0.currencyName)}

ИЛИ

for names in currencies {  // not perferred 
    namesArray.append(names.currencyName)
}

//

Редактировать: , затем использовать

namesArray = Array(currencies.map{$0.currencyName}.prefix(1)) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...