반응형
프로퍼티의 종류
- 인스턴스 저장 프로퍼티
- 타입 저장 프로퍼티
- 인스턴스 연산 프로퍼티
- 타입 연산 프로퍼티
- 지연 저장 프로퍼티
프로퍼티의 정의
- 연산 프로퍼티는 var로만 선언할 수 있다. ( 연산인데 상수로 선언 하는게 이상하긴 함..; )
- 연산 프로퍼티는 읽기전용으로는 구현할 수 있지만 쓰기전용으로는 구현할 수 없음.
- set블럭에서는 암시적으로 newValue를 사용할 수 있다.
코드로 공부하자!
struct SampleStruct{
// 인스턴스 저장 프로퍼티
var name : String = "뚠님";
var age : Int = 10;
// 인스턴스 연산 프로퍼티
var anotherAge : Int {
get { // 호출했을 때 실행되는 구문. get으로 선언한다.
return age - 1;
}
set(inputAge) { // 호출됬을 때 실행되는 구문. set으로 선언한다.
age = inputAge -1;
}
}
var anotherAge2 : Int {
get { // 호출했을 때 실행되는 구문. get으로 선언한다.
return age - 1;
}
set { // 호출됬을 때 실행되는 구문. set으로 선언한다.
age = newValue -1; // set에 별도의 인자가 없으면 newValue를 이용해서 사용할 수 있음.
}
}
// 타입 저장 프로퍼티
static var typeValue : String = "타입 프로퍼티";
//읽기 타입 인스턴스 연산 프로퍼티
//읽기전용 인스턴스 연산 프로퍼티는 있으나 쓰기전용은 없다.
// get만 있거나 get, set이 같이 있거나.
var readProperty : String {
get {
return "나는 읽기전용 입니다앙";
}
}
}
//읽기 전용에서는 get을 생략할 수 있다.
var readProperty2 : String {
return "나는 읽기전용2 입니다";
}
//사용하기
print(SampleStruct.typeValue); // 타입 프로퍼티
//읽기전용 인스턴스 연산 프로퍼티 사용.
var tempStruct : SampleStruct = SampleStruct();
print(tempStruct.readProperty());
//인스턴스 저장 프로퍼티 사용
tempStruct.name = "뚜운님";
//anotherAge 인스턴스 연산 프로퍼티 사용
print("\(tempStruct.name)의 나이는 \(tempStruct.anotherAge) 입니당.");
프로퍼티 감시자
willSet, didSet으로 변경되기 전과 변경된 후에 처리를 할 수 있다.
var currentNum : Int = 100 {
willSet(newValue){ // 변경될 값 == newValue
print("현재 값 \(currentNum) 에서 새로운 값 \(newValue)로 변경된다");
}
didSet(oldValue){ // 변경된 값 == oldValue
print("예전 값 \(oldValue)에서 \(currentNum)으로 변경되었다.");
}
}
var currentNum : Int = 100 {
willSet { // 매개변수가 생략되어도 사용 가능하다.
print("현재 값 \(currentNum) 에서 새로운 값 \(newValue)로 변경된다");
}
didSet { // 매개변수가 생략되어도 사용 가능하다.
print("예전 값 \(oldValue)에서 \(currentNum)으로 변경되었다.");
}
}
확실히 실력없는 솜씨로 글을 쓰면서 설명하기 보다는 코드를 작성하고 주석으로 작은 설명을 하는게 더 좋은거 같다...
반응형
'Develop > iOS' 카테고리의 다른 글
Swift 이니셜라이저와 디이니셜라이저 ( init and deinit ) (0) | 2019.05.10 |
---|---|
Swift 클래스의 상속 (0) | 2019.05.10 |
Swift 클래스 와 구조체 ( Reference and Value ) (0) | 2019.05.09 |
Swift 열거형 (enum) (0) | 2019.05.08 |
Swift 구조체 (Struct) (0) | 2019.05.08 |