SwiftのdidSetの呼ばれるタイミングを調べてみました。
didSetとは
プロパティーの値セットを検知する仕組みです。
下のように書くことで、プロパティーに値がセットされたタイミングを検知する事ができます。
class MainClass { var value: Int? { didSet { print("didSet") } } }
didSetの呼ばれるタイミング
下のようにプロパティーを変更するとdidSetが呼ばれます。
class MainClass { var value: Int? { didSet { print("didSet") } } } let c = MainClass() c.value = 0 // → didSetが呼ばれる
初期値をセットする時は呼ばれません。
class MainClass { var value: Int? = 0 { // 初期値を入れても呼ばれない didSet { print("didSet") } } }
同じ値を連続で入れた場合、2回didSetが呼ばれます。
class MainClass { var value: Int? { didSet { print("didSet") } } } let c = MainClass() c.value = 0 c.value = 0 // didSetが2回呼ばれる
少し複雑ややこしいのですが、Structのプロパティーを変更した時も呼ばれます。
struct MyStruct { var value = 0 } class MainClass { var myStruct = MyStruct() { didSet { print("didSet") } } } let c = MainClass() c.myStruct.value = 0 // didSetが呼ばれる
classの場合はdidSetが呼ばれません。
class MyClass { var value = 0 } class MainClass { var myClass = MyClass() { didSet { print("didSet") } } } let c = MainClass() c.myClass.value = 0 // didSetは呼ばれない