빙수왕의 개발일지

protocol, enum의 property에 관해 본문

개발/iOS

protocol, enum의 property에 관해

빙수킹 2020. 12. 3. 21:57

사건의 발단

enum에서 CustomStringConvertible을 준수하기 위해 var description을 만들어주었음 -> 에러 발생

stored property(저장 프로퍼티)를 enum에 넣을 수 없다는 에러가 남.. 

*(enums must not contain stored properties)

 

그치 맞지. stored property는 enum에서 만들 수 없다.

근데 찾아보니 다른놈들은 잘만 enum에서 CustomStringConvertible을 준수하고 description도 써줬다.

 

알고보니 var description = "aaa" 이렇게 저장프로퍼티로 구현하고있었다.ㅎㅎ..

다른사람들은 var description: String = { "aaa" } 이렇게 해줌.

 

새로 알게된 점

- CustomStringConvertible: description을 프로퍼티로 가지는 프로토콜. 이걸 준수하는 클래스(A)의 객체(a)를 print(a)하면 그놈의 값(a)대신 description값이 나온다.

- enum, extension은 stored property를 가질 수 없고, computed property만 가질 수 있다.

- protocol에서는 property를 선언할 때 stored인지 computed인지 정하지 않는다. 그저 get set 블록을 통해 최소 조건만 써준다.

- 그럼 구현하는 쪽에서 어떻게 구현하냐에 따라서 정해지는건데, enum은 computed를 가질 수 없으므로 무조건 var키워드(let은 안됨!!)를 사용해서 연산 프로퍼티로 구현해주여야 한다.