2017-02-18 24 views
0

Я создал Swift проект простой рамки IOS и добавил один Swift класса Logger с одним методом заглушки log(_:)Проверка «Разрешить только расширение приложения API» в рамках проекта IOS предоставляет внутренние классы и методы для потребителей

class Logger: NSObject { 

    func log(_ message:String) { 
     // ... 
    } 
} 

Класс Logger и метод log являются внутренними для каркаса, а построение обычно не предоставляет их ObjC. Если я проверяю только «Разрешить API расширения приложения» только в общих настройках моей целевой среды, то сгенерированный MyFramework-Swift.h теперь содержит как объявление класса, так и метода, что означает, что оба они видны для пользователей структуры, как если бы они были объявлены общедоступными :

SWIFT_CLASS("_TtC9Framework6Logger") 
@interface Logger : NSObject 
- (void)log:(NSString * _Nonnull)message; 
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER; 
@end 

Может кто-нибудь объяснить, почему? Заранее спасибо!

+0

Вы не должны использовать скриншоты для публикации фрагментов кода. – Losiowaty

ответ

0

Как только вы включите «Разрешить API расширения приложения», сгенерированный заголовок будет содержать как общедоступные, так и внутренние классы.

Я считаю, что это, вероятно, ошибка в Xcode, как этот параметр должен воздействовать только на предупреждения, испускаемые из вашей компиляции (если вы ссылаетесь API, без расширения) и не влияет на содержимое сгенерированного Module-Swift.h

Я подаю отчет об ошибке сейчас.