我有以下代码来创建一个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
,里面有一个人。这是我的代码的所有部分都完美地运作。
我有一个单独的部分,我正在尝试转换此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
,{{1 }},personD
,personE
)。
基本上我有以下数组(包括personC
属性)。
children
我想采用该数组并递归展平(深度展平)。如下所示。
- personA
- personB
- personD
- personE
- personC
我怎样才能做到这一点?