Swift

Property - 2

728x90

1. Property Observer(속성 감시자)

var name: Type = DefaultValue {
    willSet(name) { // 파라미터 이름을 생략하면 newValue라는 기본 파라미터가 제공됩니다.
        statements
    }
    didSet(name) { // oldValue
        statements
    }
}
class Size {
    var width = 0.0 {
        willSet {
            print(width, "=>", newValue)
        }
        didSet {
            print(oldValue, "=>", width)
        }
    }
}

let s = Size()
s.width = 123

2. Type Property(형식 속성)

  • 형식 속성은 형식 자체에 속한 속성입니다.
  • 인스턴스를 생성하지 않고 클래스나 구조체 자체에 값을 저장하는 것을 타입 프로퍼티라고 합니다.
  • 저장된 값은 모든 인스턴스가 공통으로 사용할 수 있습니다.
  • 프로퍼티 앞에 static 키워드로 추가합니다.

< 저장 형식 속성 >

  • 형식 이름을 통해서 접근해야 합니다.
  • 형식 속성은 기본적으로 지연 속성입니다.
  • 속성에 처음 접근하는 시점에 초기화됩니다.
class Math {
    static let pi = 3.14
}

let m = Math()
// m.pi 형식 이름을 통해서 접근해야 합니다.

Math.pi 

< 계산 형식 속성 >

enum Weekday: Int {
    case sunday = 1, monday, tuesday, wedensday, thursday, friday, saturday
    
    static var today: Weekday {
        let cal = Calendar.current
        let today = Date()
        let weekday = cal.component(.weekday, from: today)
        return Weekday(rawValue: weekday)!
    }
}

Weekday.today

3. self

  • self는 인스턴스 자체에 접근할 때 사용합니다.
  • Type 멤버 내부에서 접근하면 형식 자체에 접근합니다.
  • self는 현재 인스턴스에 접근하기 위해 사용하는 특별한 속성입니다.
  • self를 타입 멤버에서 사용하면 인스턴스가 아닌 형식 자체를 나타냅니다.
self 인스턴스 자체에 접근할 때 사용합니다.
self.propertyName 인스턴스 속성에 접근할 때 사용합니다.
self.method() 메소드에 접근할 때 사용합니다.
self[index] 서브스크립트 호출할 때 사용합니다.
self.init(param) 동일한 형식에 있는 다른 생성자를 호출할 때 사용, self 생략 불가합니다.
class Size {
    var width = 0.0
    var height = 0.0
    
    func Area() -> Double {
        return self.width * self.height // self를 생략할 수 있습니다.
//        return width * height
    }
    
    func update(width: Double, height: Double) {
        self.width = width
        self.height = height
    }
    
    static let unit = ""
    static func doSomthing() {
//        self.width 형식 메소드에서 인스턴스 메소드에 직접 접근하는 것은 불가능합니다.
        self.unit
    }
}

 

728x90

'Swift' 카테고리의 다른 글

Subscript  (0) 2020.11.25
Method  (0) 2020.11.25
Property - 1  (0) 2020.11.24
Structure and Class  (0) 2020.11.22
Enumeration  (0) 2020.11.22