我有一个完全用Swift编写的框架,它包含在一个使用Objective-C和Swift混合的应用程序中,即
#import "MyFramework-Swift.h"
Run Code Online (Sandbox Code Playgroud)
如果Swift 3 @objc inference转向ON框架目标,那么一切都编译并运行正常.如果Swift 3 @objc inference转为OFF那么框架本身将编译,但它包含的文件没有,并吐出一堆错误,如:
Unknown type name 'NSArray' 要么 Unknown type name 'NSError'
在Objective-C的文件进口在那里我想使用这个框架基本上是这个样子(即基金会是尝试导入迅速框架前被导入):
@import Foundation;
#import <OtherNonSystemHeaders.h>
#import "ThisFilesHeader.h"
#import "MyFramework-Swift.h"
Run Code Online (Sandbox Code Playgroud)
如果我打开Xcode生成的头文件,那么有一个大约150行的部分,如下所示:
#if __has_feature(modules)
@import ObjectiveC;
#endif
Run Code Online (Sandbox Code Playgroud)
如果我手动将其更改为此,它将编译并运行.
#if __has_feature(modules)
@import ObjectiveC;
@import Foundation;
#endif
Run Code Online (Sandbox Code Playgroud)
显然这不是一个真正的解决方案,因为它会在Xcode重新生成该标题时被覆盖,但我无法理解为什么关闭@objc推断会导致导入消失.我已经手动将某些方法标记为@objc,框架中的所有类都是NSObject的子类,并且每个文件都导入了Foundation.
我认为这可能是一个错误,但是Xcode 9.2和9.3都会发生这种情况,显然人们可以关闭@objc推理,因为它现在是推荐的设置.但我真的很茫然.
这听起来像是您@import Foundation;在 ObjC 中失踪之前:
#import "MyFramework-Swift.h"
Run Code Online (Sandbox Code Playgroud)
ObjC 文件@import Foundation;本身应该如此。出于性能原因,这通常也放置在预编译头 (.pch) 中,但每个头.m仍应导入其所需的所有内容,包括 Foundation。
通常我推荐以下.m文件布局:
@import ...System Headers...
#import "Non-system framework headers"
#import "Local headers"
#import "Project-Swift.h"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
622 次 |
| 最近记录: |