ImplicitlyUnwrappedOptionalなlazyが不思議な挙動をしたので調べてみました。
問題の挙動は以下の通りです。
変数にnilを入れたのに変数を参照しようとすると初期化処理が走りました。
class MyClass { lazy var value: Int! = { print("In Lazy") // → 2回printされる return 1 }() } let c = MyClass() print(c.value) value = nil print(c.value) // 1が入ってる
Optionalの場合は普通にnilが入ります。
class MyClass { lazy var value: Int? = { print("In Lazy") return 1 }() } let c = MyClass() print(c.value) value = nil print(c.value) // nilが入ってる
調べてみたら1年位までから言われていた挙動のようです。