Создать новый массив частично из другого массива

#arrays #swift #swiftui

#массивы #swift #swiftui

Вопрос:

Я очень новичок в Swift, поэтому извините меня, если это глупый вопрос.

У меня есть X массив объектов в формате JSON, который я загружаю в свое приложение и передаю представления (для него у меня есть определенная структура). Теперь в другом представлении у меня есть новая структура, которая выглядит следующим образом:

 struct Pin: Identifiable {
    var name: String
    let id = UUID()
}
 

а затем создайте массив следующим образом:

 @State private var pins: [Pin] = []
 

Как я могу сделать так, чтобы этот массив содержал Pin объекты, но созданные из моего существующего X массива. Я имею в виду, что каждый новый Pin внутренний pins массив будет иметь значения Pin(name: X.name[0] и так далее для каждого элемента в моем X массиве.

Итак, мой окончательный pins массив должен выглядеть примерно так:

 [Pin(name: x.name[0]...), Pin(name: x.name[1]...), Pin(name: x.name[2]...)...]
 

Комментарии:

1. Что такое X array? А как насчет image в новом массиве?

2. @pawello2222 X массив представляет собой массив объектов, каждый из которых имеет name , description и пару других полей, которые мне не нужны для этого конкретного представления. Вы можете игнорировать изображение, я собирался его получить, но в конечном итоге решил не делать этого, удалю его из примера кода 🙂

Ответ №1:

Вы можете использовать map для преобразования одного массива в другой:

 pins = x.map { Pin(name: $0.name) }
 

или, медленнее, но показывает другой способ использования map :

 pins = x.map(.name).map(Pin.init)
 

Комментарии:

1. АХ, удивительно, это сделало именно то, что мне было нужно! Я разработчик JavaScript и использую карты каждый божий день, но по какой-то причине мне не приходило в голову, что их также можно использовать в Swift… В любом случае, большое вам спасибо!