как перебрать эту переменную, где у sub может быть еще 10 подписок, например?
struct Struct {
let title: String
let sub: [Struct]?
}
let variable = Struct(
title: "1",
sub: [
Struct(title: "1.1", sub: nil),
Struct(title: "1.2", sub: [
Struct(title: "1.2.1", sub: nil),
Struct(title: "1.2.2", sub: [
Struct(title: "1.2.2.1", sub: nil)
])
])
]
)
Это довольно просто. Рекурсия. Допустим, мы просто хотим напечатать все заголовки. Представьте себе метод, в котором узел печатает свой заголовок, а затем вызывает один и тот же метод для каждого из своих дочерних элементов. По определению, если вы вызовете этот метод на корневом узле, вы распечатаете все заголовки. Минимальная реализация (не беспокоясь о порядке посещения или формате вывода):
func output() {
print(title)
self.sub?.forEach { $0.output() }
}
Главное, чтобы мой
display
звонилchildren.map { $0.display }
. Если каждый узел печатает и говорит своим дочерним элементам печатать, вы напечатали их все.