안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
이번 포스팅에서는 프로퍼티와 프로퍼티 감시자에 대해 공부합니다.
프로퍼티는 구조체나 클래스, 열거형에서 구현하는데요.
타입이랑 연관된 값을 표현할 때 사용합니다.
프로퍼티에는
저장 프로퍼티
연산 프로퍼티
인스턴스 프로퍼티
타입 프로퍼티가 있으며 열거형에는 연산 프로퍼티만 구현할 수 있고,
연산 프로퍼티는 var 키워드를 통해서만 구현할 수 있습니다.
예제)
Struct Example { // 저장 프로퍼티 var name : String = "" var age : Int = 0
// 인스턴스 연산 프로퍼티 var ageInForeignCountry : Int { get { return age - 1 } set (input) { age = input + 1 } } // 타입 저장 프로퍼티 static var gender : String = "남자" // 읽기 전용 연산 프로퍼티 : 메소드처럼 사용 가능 ( 쓰기 전용은 X ) var printMyGender : String { get { return "저의 성별은 \(gender) 입니다" } }
// 읽기 전용 타입 연산 프로퍼티( 읽기 전용에서는 get 생략 가능 ) static var myGender : String { return "저는 \(gender) 입니다" } } // 타입 연산 프로퍼티의 사용 print(Example.myGender) // 저는 남자입니다 var example : Example = Example() example.age = 26 // 인스턴스 저장 프로퍼티의 사용 example.name = "알통몬" // 인스턴스 연산 프로퍼티의 사용 print(example.printMyGender) // 저의 성별의 남자입니다
print("저는 \(example.age) 살입니다. 외국 나이로는 \(example.ageInForeignCountry) 살입니다") * 저장 프로퍼티와 연산 프로퍼티의 기능들은 함수나 클로저, 타입 등의 외부에 위치한 지역변수나 전역변수에도 모두 사용이 가능합니다. 예) var x : Int = 10 var y : Int = 20 var sum : Int { return x + y }
|
프로퍼티 감시자 : 프로퍼티의 값이 변경될 때( 변경되기 직전, 변경된 직후)
원하는 동작을 수행할 수 있습니다.
willSet (value) { //구현 코드 } // 프로퍼티의 값이 변경되기 직전에 호출됩니다. didSet (value) { //구현 코드} // 프로퍼티의 값이 변경된 직후에 호출됩니다. struct Stock { var stockPrice : Double = 500 { willSet (newPrice) { print("주식 가격이 \(stockPrice) 에서 \(newPrice)로 변경될 예정입니다") } didSet (oldPrice) { print("주식 가격이 \(oldPrice) 에서 \(stockPrice)로 변경되었습니다") } }
// 연산 프로퍼티 var price : Double { get { return ~~ } set { return ~~ } // 연산프로퍼티 안에서는 감시자를 사용할 수 없습니다. } } * 프로퍼티 감시자도 프로퍼티처럼 함수나 클로저, 타입 등의 외부에 위치한 지역변수나 전역변수에도 모두 사용이 가능합니다. 예제) var x : Int = 100 { willSet (newVal) { print("x 값이 \(x) 에서 \(newVal)로 변경될 예정입니다") } didSet (oldVal) { print("x 값이 \(oldVal) 에서 \(x)로 변경되었습니다") } } //willSet 호출 => x 값이 100 에서 300으로 변경될 예정입니다 x = 300 // didSet 호출 => x 값이 100에서 300으로 변경되었습니다. |
다음 포스팅에서는 상속에 대해 공부하겠습니다~~
이상입니다.
'Swift3(스위프트3)' 카테고리의 다른 글
swift3 스위프트3 인스턴스의 생성, 인스턴스 소멸 (0) | 2017.07.07 |
---|---|
swift3 스위프트3 상속 (0) | 2017.07.07 |
swift3 스위프트3 클로저 closure (0) | 2017.07.05 |
swift3 스위프트3 값 타입과 참조 타입 - Value Type VS Reference Type (0) | 2017.07.05 |
swift3 스위프트3 열거형 enum (0) | 2017.07.04 |