
변수로 선언되어야한다.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]