class 객체명 {
var 프로퍼티명 : 타입 {
get{
필요한 연산 과정
return 반환값
{
set(매개변수명) {
필요한 연산 구문
}
}
}
struct Rect {
// 사작형이 위치한 기준 좌표(좌측 상단 기준)
var originX: Double = 0.0, originY: Double = 0.0
// 가로 세로 길이
var sizeWidth: Double = 0.0, sizeHeight: Double = 0.0
// 사각형의 X 좌표 중심
var centerX: Double {
get {
return self.originX + (self.sizedWidth / 2)
}
set(newCenterX) {
originX = newCenterX - (self.sizedWidth / 2)
}
}
// 사각형의 Y 좌표 중심
var centerY: Double {
get {
return self.originY + (self.sizeHeight / 2)
}
set(newCenterY) {
self.originY = newCenterY - (self.sizeHeight / 2)
}
}
}
var square = Rect(originX: 0.0, originY: 0.0, sizeWidth: 10.0, sizeHeight: 10.0)
print("square.centerX = \(square.centerX), square.centerY = \(square.centerY)")
// 실행 결과
// square.centerX = 5.0, square.centerY = 5.0
// 오류
var temp : Double = self.origin.x + self.origin.y
// 연산 프로퍼티를 사용해야 함. get{} 생략한 연산 프로퍼티
var temp : Double {
return self.origin.x + self.origin.y
}
willSet : 프로퍼티 값이 변경되기 직전에 호출되는 옵저버
didSet : 프로퍼티 값이 변경된 직후에 호출되는 옵저버
struct Job {
var oldValue : Int
var income: Int = 0 {
willSet(newIncome) {
print("willSet가 호출되었습니다.")
print("InCome = \(newIncome)")
}
didSet {
print("didSet가 호출되었습니다.")
print("InCome = \(income)")
print("oldValue = \(oldValue)")
print("self.oldValue = \(self.oldValue)")
}
}
}
var temp = Job(oldValue: 1000)
temp.income = 100
// 출력 결과
/*
willSet가 호출되었습니다.
InCome = 100
didSet가 호출되었습니다.
InCome = 100
oldValue = 0
self.oldValue = 1000
*/
struct Foo {
// 타입 저장 프로퍼티
static var sFoo = "구조체 타입 프로퍼티값"
// 타입 연산 프로퍼티
static var cFoo: Int {
return 1
}
}
class Boo {
// 타입 저장 프로퍼티
static var sFoo = "클래스 타입 프로퍼티값"
// 타입 연산 프로퍼티
static var cFoo: Int {
return 10
}
// 재정의가 가능한 타입 연산 프로퍼티
// 클래스, 연산 프로퍼티에서만 사용 가능.
class var oFoo: Int {
return 100
}
}
var temp = Foo()
print(temp.sFoo) // 오류, 접근 불가
print(Foo.sFoo) // 정상 출력
class SuperClass {
class var typeProperty: String {
return "SuperClass"
}
static var str : String = "This is a string from SuperClass"
}
class SubClass: SuperClass {
override class var typeProperty: String {
return "SubClass"
}
/* 오류
override static var str : String = "This is a string from SubClass"
*/
}
print(SuperClass.typeProperty) // "SuperClass"
print(SubClass.typeProperty) // "SubClass"
print(SuperClass.str) // "This is a string from SuperClass"
print(SubClass.str) // "This is a string from SuperClass"