作成した構造体の監視対象プロパティで UnsafeMutablePointer を使用すると、予期しない動作が発生しました (Xcode 10.1、Swift 4.2)。次のプレイグラウンド コードを参照してください。
struct NormalThing {
var anInt = 0
}
struct IntObservingThing {
var anInt: Int = 0 {
didSet {
print("I was just set to \(anInt)")
}
}
}
var normalThing = NormalThing(anInt: 0)
var ptr = UnsafeMutablePointer(&normalThing.anInt)
ptr.pointee = 20
print(normalThing.anInt) // "20\n"
var intObservingThing = IntObservingThing(anInt: 0)
var otherPtr = UnsafeMutablePointer(&intObservingThing.anInt)
// "I was just set to 0."
otherPtr.pointee = 20
print(intObservingThing.anInt) // "0\n"
一見すると、UnsafeMutablePointer のポインティを監視対象のプロパティに変更しても、実際にはプロパティの値は変更されません。また、ポインターをプロパティに割り当てる操作によって、didSet アクションが起動されます。ここで何が欠けていますか?