티스토리 뷰

Swift & objc

objective-c collection generics

rhinoPHS 2019. 2. 5. 20:11

objective-c collection generics

objc의 제네릭은 lightweight이라고 한다. 원래 objc의 제네릭이 없었던 것 같은데 swift의 제네릭과 호환하기 위해서 나온 것 같다. 꼭 호환을 위해서가 아니더라도 objc에서 자체적으로 쓸 수도 있는데 swift에 비해서 strict하지 않다. 그래서 lightweight라고 한 것 같다. swift에서는 염격하게 제네릭 타임이 아니면 넣지도 못하는데 objc에서는 경고만 띄어준다. 경고에 성격상 빌드도 되고 실행도 된다. 또한 콜랙션 요소를 받을 때도 타임이 맞지 않으면 경고만 띄어준다. 역시 실행된다. 기본적으로 objc에서 쓸 때는 제한이 많이 없는 것 같다. custom class에서도 사용가능하고, 기본 콜랙션 객체인 NSSet, NSArray, NSDictionary 외에 NSMutableArra NSMutableDictionary 등. 다만, swift와 호환을 하면 NSSet, NSArray, NSDictionary를 제외한 나머지 객체에 대해서는 swift가 무시 한다고 한다. 더 상세하고 자세한 예제들은 아래 링크에서 확인할 수 있다. 쓰기는 쉽다. 그래서 lightweight인가? objc 런타임이 아니라 LLVM에서 지원하는 거라서 그렇다고 하는 글도 있다. 여기에는 __kindof도 소개해준다. __kindof type하면, type의 하위타입들도 다 포함.

위 __kindof는 콜랙션에 쓰고 
__covariant custom type에 쓴다.


                              자바
__covariant 는 < ? extends T>
__contravarian는  <? super T>

여기에서도 소개하고 있다.

한국어

영어

objc에 제네릭이 추가되기 전에 만들어 진 것 같은 소스
일일이 하나씩 다 구현한 노고에 박수👏

관련 apple 문서

wwdc 2015 - 401
objc에서 제네릭을 구현하고 swift에서 어떻게 보이는지 보는 방법(슬라이드 앞에 2장만 보면 됨) swift와 objc가 어떻게 서로 연결되는지? 등 전반적인 내용 


반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함