2017-02-18 20 views
0

我創建了一個簡單的iOS框架斯威夫特項目,並添加了一個斯威夫特類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

我提交的內容中的錯誤一個錯誤報告現在。