Можно ли предотвратить экспорт расширений в заголовок Swift для Objective-C?
У меня есть проект Objective-C с 1 классом Swift. Этот класс использует каркас, который также написан на Swift. (Используются CocoaPods для включения в рамки)
Моя проблема в том, что файл -Swift.h экспортирует мои расширения, которые придерживаются протоколов в рамках. Теперь, когда я пытаюсь импортировать файл -Swift.h в Objective-C, он жалуется, что определения протокола не могут быть найдены.
Я не хочу, чтобы эти расширения экспортировались. Они используются только в этом классе. Я не могу использовать private или fileprivate для расширений, которые объявляют о соответствии протокола. Я также попытался добавить @nonobjc перед объявлением расширения (которое включало предупреждения в мои методы), и оно все еще экспортировалось.
Вот мои расширения:
extension MessagingExperience: MessagingDelegate {
...
}
extension MessagingExperience: MessagingNotificationDelegate {
...
}
И сгенерированный заголовок:
@interface MessagingExperience (SWIFT_EXTENSION(Reference_App)) <MessagingDelegate>
- (void)MessagingObseleteVersion:(NSError * _Nonnull)error;
- (void)MessagingError:(NSError * _Nonnull)error;
@end
@interface MessagingExperience (SWIFT_EXTENSION(Reference_App)) <MessagingNotificationDelegate>
- (BOOL)shouldShowMessagingNotificationWithNotification:(MessagingNotification * _Nonnull)notification SWIFT_WARN_UNUSED_RESULT;
- (void)messagingNotificationTapped:(MessagingNotification * _Nonnull)notification;
- (UIView * _Nonnull)customMessagingNotificationViewWithNotification:(MessagingNotification * _Nonnull)notification SWIFT_WARN_UNUSED_RESULT;
@end
Ошибки, вызванные включением -Swift.h в класс Objective-C:
Не удается найти объявление протокола для 'MessagingDelegate'
Не удается найти объявление протокола для 'MessagingNotificationDelegate'
Есть ли способ предотвратить это в шапке?
Благодарю.
1 ответ
Создайте закрытый класс в MessagingExperience.swift, который соответствует протоколу, определенному в платформе. Поскольку это закрытый класс, протокол не будет указан в сгенерированном -Swift.h.