안녕하세요:)
이번에는 형식 내부에 값을 저장하고 처리하는 방법인 속성에 대해서 알아보도록 하겠습니다.
var name: Type = DefaultValue // 저장된 값을 언제든 바꿀수 있음
let name: Type = DefaultValue // 인스턴스 초기화가 완료되면 바꿀 수 없음
class User {
let name: String = "Kim"
var age: Int = 26
}
let u = User()
u.name // Kim
u.age // 26
struct User2 {
let name: String = "Kim"
var age: Int = 26
}
let u2 = User2()
u2.name
u2.age
u2.age = 30 // 에러!, 인스턴스를 상수에 저장했기 때문에 값 변경 불가, 변수로 바꿔주면 변경 가능합니다.
class Oncreate {
init() {
print("Oncreate!!")
}
}
class LazyTest {
var base = 0
lazy var late = Oncreate()
init() {
print("Lazy Test!")
}
}
let lz = LazyTest()
lz.late
var name: Type { // 형식추론을 사용할 수 없고, 자료형을 명시적으로 선언해야 합니다.
get { // get Block
statements
return expr
}
set(name) { // set Block 값을 저장할 때 실행됩니다. (name)은 파라미터 이름입니다.
statements
}
}
class Person {
var year: Int? // 태어난 연도
var thisYear: Int? { // 올해가 몇년도 인지 계산
get {
let df = DateFormatter()
df.dateFormat = "yyyy"
return Int(df.string(from: Date()))
}
}
}
let p = Person()
p.thisYear // 2020
class PropertyInit {
var value01: String! = {
print("value01 execute")
return "value01"
}()
let value02: String! = {
print("value02 execute")
return "value02"
}()
lazy var value03: String! = {
print("value03 execute")
return "value03"
}()
}
let p = PropertyInit()
p.value01
p.value02
p.value03