클래스, 구조체, 열거형에서 사용된다. 저장 프로퍼티와 달리 저장 공간을 갖지 않고, 다른 "저장프로퍼티"의 값을 읽어 연산을 실행하거나, 프로퍼티로 전달받은 값을 다른 프로퍼티에 저장한다. 때문에 항상 var로 선언되어야 한다
형식)
var name: Type{
get{ //getter(다른 저장 연산프로퍼티의 값을 얻거나 연산하여 리턴할 때 사용
statements
return expr
}
set(name){//setter(다른 저장프로퍼티에 값을 저장할 때 사용
satements
}
}
ex)
//잘못된 예시
class Person{
var alias: String { //다른 프로퍼티가 아닌 자신을 처리하므로 에러발생
get{
return alias
}
set(name) {
self.alias = name
}
}
}
//옳은 예시
class Person{
var name: String = "abc"
var alias: String {
get{
return name // 저장프로퍼티인 name 리턴
}
set(name) {
self.name = name // 저장프로퍼티인 name 저장
}
}
}
class Person{
var name: String = "abc"
var alias: String {
get{
return name + "hijk"// 원하는 연산추가 가능
}
set(name) {
self.name = name "defg"// 원하는 연산 추가 가능
}
}
}
class Person{
var name: String = "abc"
var alias: String {
get{
return name + "hijk"// 원하는 연산추가 가능
}
set(name) {
self.name = name "defg"// 원하는 연산 추가 가능
}
}
}
let people: Person = .init()
//get에 접근
print(people.alias) // abchijk
//set에 접근
people.alias = "가나다"
print(people.name) // 가나다defg
newValue를 통해 set의 파라미터 생략가능(스펠링 및 대소문자 변경X)
var displayValue: Double{
get{
return Double(display.text!)!
}
set{
display.text = String(newValue)
}
}
displayValue = Double.pi
연산 프로퍼티를 사용할 때 getter만 선언 가능
class Person{
var name: String = "abc"
var alias: String {
get{
return name + "hijk"
}
}
}
//get-only일 경우 get구문 생략 가능
class Person{
var name: String = "abc"
var alias: String {
return name + "hijk"
}
}
참조
개발자 소들이