Свойство Swift Deep Flatten Array
У меня есть следующий код для создания Person
класс и есть множество людей.
class Person {
let name: String
var children: [Person]
init() {
//removing init code to make question shorter, but just setting the variables passed in to the variables in the class
}
}
var people: [Person] = [Person]()
var personA: Person = Person.init(name: "Bob Smith")
var personB: Person = Person.init(name: "Tom Smith")
var personC: Person = Person.init(name: "Billy Smith")
var personD: Person = Person.init(name: "Steve Smith")
var personE: Person = Person.init(name: "Steve Smith")
personA.children.append(personB)
personB.children.append(personD)
personB.children.append(personC)
personD.children.append(personE)
people.append(personA)
Так что на данный момент у меня есть массив people
с 1 человеком в этом. Это все один раздел моего кода, который работает отлично.
У меня есть отдельный раздел, где я пытаюсь преобразовать это people
массив в основном сгладить его. Я попытался следующий код безуспешно.
people.flatMap({ [$0, $0.children] }).filter({ $0 is Person }) as! [Person]
Этот код не работает вообще. Я попытался внести небольшие коррективы в это и получил ошибки и предупреждения, такие как Cannot convert value of type '[Any]' to closure result type 'String?'
а также Expression implicitly coerced from '[Person]?' to Any
,
Второе предупреждение, которое я пытался изменить с [$0, $0.children]
в [$0, $0.children ?? nil]
при условии, что это решит проблему. Если children
является nil
Я в основном хочу, чтобы это продолжалось и не помещало ничего там, так как нет детей. Но внесение этого изменения продолжало вызывать ту же ошибку.
Но в основном я хочу взять people
сверху и преобразовать его из 1 элемента (personA
) до 5 элементов (personA
, personB
, personD
, personE
, personC
).
В основном у меня есть следующий массив (в том числе children
имущество).
- personA
- personB
- personD
- personE
- personC
Я хочу взять этот массив и сгладить его рекурсивно (глубоко сгладить). Вроде следующего.
- personA
- personB
- personD
- personE
- personC
Как мне этого добиться?