arrays - 为什么我不能在其 willSet 事件中从数组中删除元素?

标签 arrays swift value-type didset property-observer

逻辑是当一个数组有指定数量的元素时清除它。我可以将检查放在数组之外,但我想看看如果在数组的 willSet 事件中执行它会怎样。结果是 Array 中的元素保持静止。

这是代码

var MyArr=[String]() {
   willSet{
        print("now count is:\(MyArr.count)")
        if MyArr.count>2 {
            print("now remove all!")
            MyArr.removeAll()
        }
    }
}

MyArr.append("hello")
MyArr.append(",world")
MyArr.append("!")
MyArr.append("too much.")

print("The conent is \(MyArr)")

MyArr 预计只有一个元素,而实际结果是四个。

最佳答案

该行为与值类型/引用类型无关

请注意警告

Attempting to store to property 'MyArr' within its own willSet, which is about to be overwritten by the new value

这意味着修改willSet中的对象没有效果。

关于arrays - 为什么我不能在其 willSet 事件中从数组中删除元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51481607/

相关文章:

swift - RealityKit – 获取 ModelEntity 大小作为 SIMD3<Float>

c# - 如何将 valuetype 设置为正整数?

javascript - 如何阻止我的函数修改我传入的值?

javascript - 在 cookie 中存储带有特殊字符的 javascript 数组

arrays - Delphi:声明包含常量数组的常量记录类型

php - 在 PHP 中分解字符串

javascript - 如何按重复值拆分数组?

swift - 午睡处理多个请求

c# - 值类型之间有何不同?

swift - 当 App 显示 NSAlert 时保持 Cocoa 窗口最小化