반응형
개요
- classes, structures, enumeration 에서는 computed properties 를 선언할 수 있다.
- computed property 의 값은 고정되어있지 않기 때문에
var
키워드를 통해 선언되어야 한다. - 실질적인 값을 저장하지 않는 대신 다른 property에 간접적으로 값을 얻고 설정하기 위해 getter 와 optional setter를 제공한다.
struct Point {
var x = 0.0, y = 0.0
}
struct Size {
var width = 0.0, height = 0.0
}
struct Rect {
var origin = Point()
var size = Size()
var center: Point {
get {
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
set(newCenter) {
origin.x = newCenter.x - (size.width / 2)
origin.y = newCenter.y - (size.height / 2)
}
}
}
var square = Rect(origin: Point(x: 0.0, y: 0.0),
size: Size(width: 10.0, height: 10.0))
let initialSquareCenter = square.center
square.center = Point(x: 15.0, y: 15.0)
print("square.origin is now at (\(square.origin.x), \(square.origin.y))")
// Prints "square.origin is now at (10.0, 10.0)"
Point
: x-y 좌표계에서의 좌표를 캡슐화 한다.Size
: width 와 height 를 캡슐화 한다.Rect
: 사각형의 원점과 크기를 정의한다.
square 변수의 center property 에 접근하면 getter 가 호출되어 현재 property의 값을 얻을 수 있다.
getter 는 사각형의 중심에 해당하는 좌표값을 계산하여 반환한다.
반대로 center의 setter 를 사용하여 사각형의 중심을 바꾸면 x, y 좌표값을 알맞게 변환하여 origin property 에 저장한다.
위와 같은 원리로 사각형의 위치가 이동하게 된다.
Setter의 선언을 조금 더 간결하게 표현하는 방법
- 기존 computed variable의 setter에서 새로운 값을 받아올 때 newValue 파라미터를 통해 받아왔다.
- 기존처럼 인자의 이름을 지정해주지 않아도 새로 설정된 값을 불러올 수 있다.
- 이때 기본 입력값의 이름은
newValue
이다.
var center: Point {
get {
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
set {
origin.x = newValue.x - (size.width / 2)
origin.y = newValue.y - (size.height / 2)
}
}
Getter의 선언을 조금 더 간결하게 표현하는 방법
- getter가 body 에서 한줄의 expression으로 선언되었다면 암묵적으로
return
키워드를 생략할 수 있습니다.
var center: Point {
get {
Point(x: origin.x + (size.width / 2),
y: origin.y + (size.height / 2))
}
set {
origin.x = newValue.x - (size.width / 2)
origin.y = newValue.y - (size.height / 2)
}
}
Read-Only Computed Properties
- getter는 있는데 setter가 없는 computed property를 읽기 전용 computed property 라고 부른다.
- 읽기 전용 computed property 는 언제나 값을 반환하며 dot syntex 를 통해 접근할 수 있다.
- 읽기 전용 computed property 를 선언할 때
get
키워드를 생략할 수 있다.struct Cuboid { var width = 0.0, height = 0.0, depth = 0.0 var volume: Double { return width * height * depth } } let fourByFiveByTwo = Cuboid(width: 4.0, height: 5.0, depth: 2.0) print("the volume of fourByFiveByTwo is \(fourByFiveByTwo.volume)") // Prints "the volume of fourByFiveByTwo is 40.0"
반응형
' Apple > Swift Programming Language' 카테고리의 다른 글
[Swift] 공식문서 씹어먹기: Package Manager (0) | 2021.12.20 |
---|---|
[Swift] 공식문서 씹어먹기: Automatic Reference Counting (0) | 2021.11.21 |
[Swift] 공식문서 씹어먹기: Collection Type - Dictionary (0) | 2021.10.22 |
[Swift] 공식문서 씹어먹기: Initialization (0) | 2021.10.18 |
[Swift] 공식문서 씹어먹기: Strings and Characters (0) | 2021.09.23 |