흔히 알고있는 프로퍼티는 "저장 프로퍼티"로 값을 저장하는 역할을 합니다.
그러나, 아주 유용한 계산 프로퍼티로 사용하는 방법도 있습니다.
계산 프로퍼티(Computed Properties) 를 공부하면서 예시를 들어볼게요.
계산 할 때도 유용하지만, 화면 전환시 VC1에서 VC2의 계산프로퍼티에 엑세스하면 어떤 함수를 호출한다던지
다양한 방법으로 사용이 가능한 것 같습니다.
계산 프로퍼티 get 사용해보기
아주아주 쉬운 순한맛 예시로 곱셈을 해보겠습니다.
import Foundation
struct Multi {
// first x second 이렇게 2개 항을 만듭니다.
var first: Int
var second: Int
var result = 0
// 여기에 계산 프로퍼티가 적용됩니다.
// 계산프로퍼티는 항상 var로 정의해야합니다
// get은 Multi().calculate 가 호출될 때 return됩니다.
var calculate: Int {
get {
return first * second
}
}
}
// 자 이제 이 구조체를 사용해서 곱셈을 해봅시다.
// 우선 a라는 변수에 구조체를 초기화합니다.
// 5 * 4를 해줄게요.
var a = Multi(first: 5, second: 4)
print("곱셈 결과는 \(a.calculate) 입니다.")
// 출력 --> 곱셈 결과는 20 입니다.
위처럼 get만 사용한 계산프로퍼티를 읽기전용 계 산사로퍼티라 합니다.
(Read-only Computed Properties)
호출할 때 지정한 Type으로 return 합니다.
이름과 같이 값을 호출하는 것만 가능하고 값을 셋팅하는 것은 불가합니다.
get, set 모두 사용하기
자 이제 get을 사용해봤으니 set도 같이 써봅시다.
MyPoint라는 구조체를 만들어 계산프로퍼티인 point 를 호출하면 현재 점수를, point를 세팅하면 세팅 값 만큼 점수를 업데이트 해보겠습니다.
import Foundation
struct MyPoint {
// 포인트를 초기화 합니다.
var currentPoint: Int
// 이 부분이 계산 프로퍼티입니다.
// get은 프로퍼티 호출시, set은 값 세팅시 호출됩니다.
var point: Int {
// get에는 단순히 현재가진 포인트를 리턴할거에요.
get {
print("현재 Heon님은 \(currentPoint)점 입니다.")
return currentPoint
}
// set은 현위치에서 값이 셋업된 만큼 더하여 현위치를 업데이트 할거에요.
// newValue는 따로 지정하지 않아도 세팅한 값을 담고있습니다.
// set(newPoint)와 같이 이름을 지정할수도 있습니다.
set {
currentPoint += newValue
print("Heon님은 \(newValue) 점을 획득하여 총\(currentPoint)점 입니다.")
}
}
}
// heon이라는 구조체를 초기화하고 포인트를 0점으로 설정합니다.
var heon = MyPoint(currentPoint: 0)
// Point에 엑세스하여(get) 현재 점수를 확인합니다.
heon.point
// 현재 Heon님은 0점 입니다.
// 이제 값을 세팅해봅시다.
heon.point = 30
// --> Heon은 30점을 획득하여 총 30점 입니다.
heon.point = 50
// --> Heon은 50점을 획득하여 총 80점 입니다.
heon.point
// --> 현재 Heon님은 80점입니다.
Swift 공식문서 예제를 보고 너무 헷갈렸는데 이제 조금씩 이해가 되는 것 같네요..!
다들 조금 조금씩 이해하다보면 Swift 공식문서 예시도 딱 이해가 되실거에요.
이해가 되신 분들은 아래 문서도 읽어보세요!!
Swift 공식문서 [계산 프로퍼티]
영문(공식)
https://docs.swift.org/swift-book/LanguageGuide/Properties.html
한글(번역)
https://jusung.gitbook.io/the-swift-language-guide/language-guide/10-properties#computed-properties
'개발 > Swift' 카테고리의 다른 글
[Xcode] 케이블 없이 무선으로 iPhone 앱 테스트하기. (0) | 2022.07.02 |
---|---|
[Swift] String을 Double로 변환하기 (NSString 이용) (0) | 2022.06.29 |
[Swift] 맥북에 Cocoapods 설치하기 (0) | 2022.06.27 |
[Swift/SPM] SwipeCellKit으로 스와이프로 삭제하는 기능 추가, VC간 공유하기 (with. Realm) (0) | 2022.06.26 |
[Swift/Realm] List-LinkingObject 로 관계 설정한 데이터 Read, Create, Update 하기. (0) | 2022.06.26 |