모두 한번쯤은 사용 해본 SnapKit에 대해
파헤쳐보겠습니다.
바로 본론으로 들어가서
해당 View에 import SnapKit을 해주지 않았는데 해당 View를 상속 받으면
Snapkit이 사용 가능한것에 의문이 들었습니다.
어떻게 이게 가능한걸까요?
VC에만 import Snapkit을 해주긴했지만
이것 때문일까요?
네! 그래서 찾아봤습니다.
일단 SnapKit의 정의에 대해 봤는데요
정의 첫줄에 희한한게 있었습니다 ( 원래 가장 첫줄이 중요한거 아시죠? )
== 는 연산자인데... lhs, rhs 뭔가 left, right를 나타내는거 같은 느낌이었고
코드를 해석해보자면...
왼쪽과 오른쪽 타입이 같은지 보고 결과로 Bool로 줘
그럼 또 Snapkit.ConstraintItem은 뭘까요
더이상 상속이 안되게 final로 막혀져 있네요
그 아래에는 Extension으로 확장이 이뤄지고 있습니다.
그렇다면 SnapKit.ConstraintRelatableTarget 얘는 누굴까요?
이렇게만 정의되어 있네요...
그렇다면 어디에 쓰이는지 확인해보겠습니다.
자주 사용했던 메소드 안에 자료형으로 있었네요...
뭔가 느낌이 해당 VIew 자체를 나타내는거 처럼 보이지 않나요??
네 공식문서를 보면
eqaulTo 안에 superView가 들어가 있는 것을 알 수 있습니다.
superView == 해당 View
살짝 감이 잡히시나요 처음에 의문을 가졌던 코드를 보면
현재 프로젝트 내에서 import SnapKit을 하면 해당 자료형과 같은 것은
SnapKit이 자동으로 적용된다는 것입니다.
확인을 해보면
자료형이 UIVIewController인 곳에 SnapKit을 import했습니다.
앞서 설명드린대로 UIViewController과 같은 자료형이면 SnapKit이 자동 적용 됩니다.
근데 말입니다... 혹시 UIVIewController가 어떻게 구성되어 있는지 아시나요?
그 중에서 UIResponder를 보면...
근본좌 NSObject로 구성되어 있습니다.
그렇기 때문에 NSObject로 구성된 모든 것에
SnapKit을 적용할 수 있습니다.
몇 가지 예시를 보여드리겠습니다.
아니? 어떻게 가능한거죠?
자료형이 UIVIew이지만 UIVIew또한 NSObject를 상속 받은 UIResponder를 가지고 있습니다.
( 어휴... 애는 더 많네요...)
그렇가면 UIButton은 어떨까요?
버튼은 NSCoding을 가지고 있네요
이렇기 때문에 Base View or VC를 만들때 한곳에만
import Snapkit을 해도 모든 곳에서
사용할 수 있다는 것을 알 수 있습니다.
혹시 내용이 틀리거나 보안해야할 부분 있으면 댓글 부탁드립니다^^
이상 먼저해보고 대신해보는 아무개발자 이었습니다.
'새싹' 카테고리의 다른 글
Realm을 사용시 이미지를 Documents에 저장할때 이미지 URL로 저장하는 방법은? (2) | 2023.09.06 |
---|---|
URLSession에서 Generic 사용하기 (0) | 2023.09.01 |
스토리보드 -> CodeBase 전환시 발생할 수 있는 오류 (Indicator편) (2) | 2023.08.28 |
CodeBase에서 UITabBar 적용하기 (0) | 2023.08.27 |
iOS CustomView 만들때 super.init(frame: frame)만 가능한 이유 (0) | 2023.08.24 |