小编M. *_*ick的帖子

didSet中的循环

当在didSet中使用循环时,我们遇到了这种奇怪的行为。这个想法是,我们有一个带有树结构的数据类型,并且在每个元素中我们都想存储该项目所在的级别。因此,在level属性的didSet中,我们还将设置子级的level属性。但是,我们意识到这仅在使用时有效forEach,而在使用时无效for .. in。这是一个简短的例子:

class Item {

    var subItems: [Item] = []
    var depthA: Int = 0 {
        didSet {
            for item in subItems {
                item.depthA = depthA + 1
            }
        }
    }
    var depthB: Int = 0 {
        didSet {
            subItems.forEach({ $0.depthB = depthB + 1 })
        }
    }

   init(depth: Int) {
        self.depthA = 0

        if depth > 0 {
            for _ in 0 ..< 2 {
                subItems.append(Item(depth: depth - 1))
            }
        }
   } …
Run Code Online (Sandbox Code Playgroud)

foreach for-in-loop swift didset

5
推荐指数
1
解决办法
305
查看次数

标签 统计

didset ×1

for-in-loop ×1

foreach ×1

swift ×1