JercyCare+ 에서 주어진 질문에 대한 제 생각입니다. :)
왜 프로토콜 변수 선언땐 let이 안될까?
공식 문서: Swift - Protocols
A protocol defines a blueprint of methods, properties, and other requirements that suit a particular task or piece of functionality. The protocol can then be adopted by a class, structure, or enumeration to provide an actual implementation of those requirements. Any type that satisfies the requirements of a protocol is said to conform to that protocol.
프로토콜은 메소드, 프로퍼티 등을 "정의"만 하고 프로토콜을 채택한 곳에서 "구현" 하기 때문에,
프로토콜 구현부에서는 gettable property에도 항상 다른 값이 들어올 수 있습니다.
let으로 선언하면 상수를 정의하여 값을 한번만 설정할 수 있고 다른 값을 가질 수 없습니다.
따라서 프로토콜 변수 선언 시에는 항상 var로 선언해야 한다고 생각합니다.
-> 이는 답이 없는 문제이나 개인적인 생각입니다! 다른 의견 있으시면 댓글로 편하게 남겨주시기 바라요 :)
weak와 unowned 의 차이
강한 순환 참조(Strong Reference Cycle)를 해결하기 위해 weak와 unowned 을 사용합니다.
weak는 optional에서 사용 할 수 있고, unowned는 non-optional인 경우에만 사용 가능하다는 것이 차이점입니다.
즉 unowned은 값이 있다고 가정하고 사용하여 nil이 주어지지 않아야 합니다.
참고 자료 - [Swift]weak와 unowned 사용 방법 by 민소네
Swift 5 Release Notes for Xcode 10.2
Swift 5.0부터 unowned 도 optiional 타입을 지원한다고 합니다!
하지만 또 다른 차이점은,
weak는 레퍼런스 카운트가 0일 때 해당 변수에 자동으로 nil을 할당해주지만,
unowned로 선언된 변수는 해제된 쓰레기값 포인터를 그대로 가지고 있습니다.
이 때 그 값에 접근 시 에러가 발생하는 차이가 있다고 합니다~!
'All Categories > iOS & Swift' 카테고리의 다른 글
iOS) localization(지역화) - 앱에서 다국어 지원하는 방법 (0) | 2022.01.27 |
---|---|
iOS 13+) Storyboard 없이 프로젝트 생성하기 (2) | 2021.02.15 |
[부스트코스 PJT5] Dispatch Queue 사용하기 (0) | 2019.09.02 |
[부스트코스 PJT1] UIButton 다루기 (0) | 2019.08.14 |
Swift 5) UIView 에 UITapGestureRecognizer 추가하기 (0) | 2019.07.05 |