2020-01-27
TIL이지만 하루동안 본 것은 아니고.. 일주일 봤나
Objective-C를 전혀 모르는 상태에서 공식문서를 읽는것과, 조금이라도 알고 읽는것엔 큰 차이가 있다! 메서드 호출이 일반적인 함수 호출과 완전 다름. 음.. 호출이 아니라 메시지를 보낸다고 해야 맞나?
#define
같은것들을 macro 라고함. preprocessor에서 처리되는 부분이라 컴파일 과정의 밖에 있음.
그냥 상수를 정의하는데 젤 많이 쓰이겠지만, 일종의 함수를 정의할 수 있을 정도의 문법 지원이 된다.
RN의 BrideModule(RCTBridgeModule.h)에 각종 매크로를 정의해놨다. (xcode에서는 go to definition 기능으로 쉽게 볼 수 있다. 아니라면 소스코드를 열어보자.)
Objective-C 클래스를 RN의 모듈로 등록하는데 사용되는 RCT_EXPORT_MODULE()
등이 있음.
RCT_EXPORT_METHOD()
를 이용해 클래스나 인스턴스의 메서드를 노출시킬 수 있다.
필수적인 것들은 공식문서를 참조하고, 공식문서 가이드에 소개되지 않은 매크로들도 소스코드에 정의 및 설명 되어있으니 필요를 느낄 때 뒤져보면 되겠음.
이거 보고나서 약간 읽을 수 있게 됨.
이것도 발췌독 https://www.tutorialspoint.com/objective_c/index.htm
당연하지만, Objective-C를 기본으로 구현이 되어있음.
매크로에 의존하고 있는데, swift는 매크로를 지원하지 않아서 결국은 objective-c 코드가 최종 경계면이 된다.
swift로 작성한 코드를 objective-c가 볼 수 있도록 @objc
를 달아가며 호환 작업을 해줘야 함. (bridging header는 덤)
그걸로 끝이 아니고, RCT_EXTERN_MODULE
를 구현해 스위프트 클래스와 메서드를 objective-c 코드에서 RN에 노출시켜야 한다.
(swift모듈) with @objc -> (objective-c 브릿지) -> RN모듈
RN은 objective-c코드를 통해서만 모듈 등록이 가능하므로, swift 코드를 objective-c 코드로 감싸 RN모듈로 등록하는것
참고자료는 공식문서가 짱인거같지만 iOS개발 해본적이 없어서 이해하기엔 부족하다.
Objective-C 프로젝트에서 Swift 코드 사용하기
http://seorenn.blogspot.com/2014/08/objective-c-swift.html
Swift 프로젝트에서 Objective-C 코드를 함께 사용하기
http://seorenn.blogspot.com/2014/07/swift-objective-c.html
[Swift] Objective C 프로젝트에서 Swift 를, Swift 프로젝트에서 Objective C 를 사용하기
https://beankhan.tistory.com/187
사실 위 글들 읽어도 어떻게 호환시키는지 방법만 알 수 있었다. 타입에 대한 호환성도 다루려면 좀 더 기본기가 필요함.