実際に呼ばれているか
確認した所呼ばれていました。
class MyClass { var arr = [String]() { didSet { print("didSet") // appendでも呼ばれた } } } let myClass = MyClass() myClass.arr.append("TEST")
なぜSwiftの配列のappendでdidSetが呼ばれるか
理由ですが、appendなどmutatingなメソッドは変数の再代入を行っているからな気がします。
実際にappendの前と後のメモリ番地が変わっていたのでおそらく再代入されています。
var arr = [String]() print(unsafeAddressOf(arr)) // → 0x00007f7ffa51c3b0 arr.append("STRING") print(unsafeAddressOf(arr)) // → 0x00007f7ffa44ad90