Один из способов - создать структуру с четырьмя свойствами для этого и добавить конкретную инициализацию, которая принимает массив
struct LastFour {
var close1: String
var close2: String
var close3: String
var close4: String
init?(_ closes: [String]) {
guard closes.count >= 4 else {
return nil
}
close1 = closes[0]
close2 = closes[1]
close3 = closes[2]
close4 = closes[3]
}
}
, а затем использовать map
при инициализации структуры из словаря
let lastFour = LastFour(requestedPrices.values.map {$0.close})
Обратите внимание, что init является необязательным и возвращает nil в случае короткого массива, другой вариант может быть, например, для выдачи ошибки.
Возможно, более гибким решением будет использование массивавнутренне в структуре, а затем доступ к данным через метод или, возможно, вычисленные свойства
struct LastFour {
private var closeEvents: [String]
func close(at index: Int) -> String {
}
}
Это, конечно, потребует аналогичного кода для init и проверки правильного размера, но было бы легче изменить, если больше или меньшенужны элементы