objective-c to swift 관련 지시자

치킨치·2024년 5월 17일
0

IGListKit 업데이트 코드를 보다가 objective-c to swift에 몇가지 지시자를 사용하고 있는 걸 발견했다.
NS_SWIFT_NAME
Apple 문서

NS_SWIFT_NAME(Sandwich.Preferences)
@interface SandwichPreferences : NSObject


@property BOOL includesCrust NS_SWIFT_NAME(isCrusty);


@end


@interface Sandwich : NSObject
@end
var preferences = Sandwich.Preferences()
preferences.isCrusty = true
typedef NS_ENUM(NSInteger, SandwichBreadType) {
    brioche, pumpernickel, pretzel, focaccia
} NS_SWIFT_NAME(SandwichPreferences.BreadType);
NS_SWIFT_NAME(ListExperimentEnabled(mask:option:))
static inline BOOL IGListExperimentEnabled(IGListExperiment mask, IGListExperiment option) {
    return (mask & option) != 0;
}

NS_SWIFT_UI_ACTOR
이 메소드에 대한 Apple 공식 문서는 나와있지 않는 희한한 점을 발견했다.
그런 이유로 구글링과 ChatGPT로 공부할 수 밖에 없었는데, 아래와 같은 문제가 있다고 한다.
https://forums.swift.org/t/ns-swift-ui-actor-annotation-not-working-with-async-variants-of-callback-based-objective-c-methods/56622

FOUNDATION_EXPORT
FOUNDATION_EXPORT는 Objective-C에서 함수, 변수, 또는 객체를 다른 파일이나 모듈에서 접근할 수 있도록 선언할 때 사용하는 매크로.
이는 주로 프레임워크나 라이브러리의 공개 인터페이스를 정의할 때 사용된다.
FOUNDATION_EXPORT는 실제로는 extern 키워드와 유사하게 동작하는데, Apple의 헤더 파일에서 FOUNDATION_EXPORT 매크로는 다음과 같이 정의되어 있습니다:

#ifdef __cplusplus
#define FOUNDATION_EXPORT extern "C"
#else
#define FOUNDATION_EXPORT extern
#endif
profile
풀스텍이었던 iOS개발자

0개의 댓글