#swift
#swift
Вопрос:
Я новичок в языке Swift, и я изо всех сил пытаюсь найти пример того, как сгладить / объединить массив вложенных объектов в один массив. Например. Используя JSON в качестве примера, я хочу преобразовать
[
{
name: 'Steve Maddon',
shoes: [
{ type: 'Jimmy Choo' },
{ type: 'Louix Crouton' }
]
},
{
name: 'Bobby Brown',
shoes: [
{ type: 'Adidas' },
{ type: 'Reebok' }
]
},
]
Для
[
{
name: 'Steve Maddon',
shoeType: 'Jimmy Choo'
},
{
name: 'Steve Maddon',
shoeType: 'Louix Crouton'
},
{
name: 'Bobby Brown',
shoeType: 'Adidas'
},
{
name: 'Bobby Brown',
shoeType: 'Reebok'
}
]
Я смоделировал это, используя следующие классы и объекты:
class Shoe {
let type: String
init(type: String) {
self.type = type
}
}
class Person {
let name: String
let shoes: [Shoe]
init(name: String, shoes: [Shoe]) {
self.name = name
self.shoes = shoes
}
}
let people = [
Person(name: "Steve Maddon", shoes: [
Shoe(type: "Jimmy Choo"),
Shoe(type: "Louix Crouton"),
]),
Person(name: "Bobby Brown", shoes: [
Shoe(type: "Adidas"),
Shoe(type: "Reebok"),
])
]
И я хотел бы сгладить эти объекты в этой структуре данных:
class PersonWithShoeType {
let name: String
let shoeType: String
init(name: String, showType: String) {
self.name = name
self.shoeType = shoeType
}
}
Я был уверен, что flatMap
это та функция, которая мне нужна, но многие примеры работают только с простыми массивами. Как я могу этого добиться?
Комментарии:
1. Пожалуйста, не помечайте спам
Ответ №1:
Этого можно достичь с помощью следующего:
class PersonWithShoeType {
let name: String
let shoeType: String
init(name: String, showType: String) {
self.name = name
self.shoeType = shoeType
}
}
let people = [
Person(name: "Steve Maddon", shoes: [
Shoe(type: "Jimmy Choo"),
Shoe(type: "Louix Crouton"),
]),
Person(name: "Bobby Brown", shoes: [
Shoe(type: "Adidas"),
Shoe(type: "Reebok"),
])
]
let personWithShoes = people.flatMap({ person in
person.shoes.map({ shoe in
PersonWithShoeType(name: person.name, shoeType: shoe.type)
})
})
Примечание для себя: сначала RTFM
Комментарии:
1. Что такое
people here
? Вы даже не дали полного описания постановки задачи и не предоставили решение без соответствующих деталей.