Swift:递归循环和展平数组

use*_*611 1 arrays recursion swift

我想更好地理解 Swift 或任何其他语言中的递归循环和扁平化。

我有一个简单的 Swift 类


class Survey { 
      let items: [SurveyItem]?
}

class SurveyItem { 
      let id: String?
      let items: [SurveyItem]?
}
Run Code Online (Sandbox Code Playgroud)

调查有items并且每个调查item可以有更多自己的类型。

我想编写一个函数,将调查中的所有项目和子项目组装成一个平面数组

rob*_*off 6

protocol SurveyItemVending {
    var items: [SurveyItem]? { get }
}

extension Survey: SurveyItemVending { }
extension SurveyItem: SurveyItemVending { }

extension SurveyItemVending {
    var allItemsRecursively: [SurveyItem] {
        let items = self.items ?? []
        return items + items.flatMap { $0.allItemsRecursively }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在您可以询问任何SurveySurveyItemallItemsRecursively