변수
로 선언되어야한다.struct
와 class
에서만 사용이 가능합니다.computed property
와는 사용을 할 수가 없다.computed property
는 호출될 때마다 지속적으로 연산을 진행해야되므로.closure
내에서의 self
를 통해서 접근이 가능하다.closure
내에서의 self
를 통해서 접근이 가능하다.class Person {
var name:String
lazy var greeting:String = {
return "Hello my name is \((self.name))"
}()
init(name:String){
self.name = name
}
}
var me = Person(name:"John")
print(me.greeting) // Hello my name is John
me.name = "James"
print(me.greeting) // Hello my name is John // 변화지 않는다!!!
→ 위에서와 greeting이 한번 메모리에 올라가게 되면 변하지 않기에 이름을 “James”로 변경해도 me.greeting은 변하지 않는다.
또 다른 예)
viewcontroller
안에서 UILabel
는 viewDidLoad()
이후에 생성이된다. 따라서 viewDidLoad()
가 되기전에 접근을 할 수 없다. 이럴 때 호출이될 때 생성이될 수 있게 lazy를 통해서 호출 전에 접근을 가능하게 할 수 있다.lazy var fruitUILabelDictionary: [Fruit:UILabel] = [Fruit.strawberry : strawberryStockLabel,
Fruit.pineapple : pineappleStockLabel,
Fruit.kiwi : kiwiStockLabel,
Fruit.banana : bananaStockLabel, Fruit.mango : mangoStockLabel]