我正在创建Swift框架,在其中我必须使用Objective类。所以我浏览了这链接。这是我的框架的公共标题:
#import <UIKit/UIKit.h>
//! Project version number for Test.
FOUNDATION_EXPORT double TestVersionNumber;
//! Project version string for Test.
FOUNDATION_EXPORT const unsigned char TestVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <Test/PublicHeader.h>
#import <arpa/inet.h>
#import <ifaddrs.h>
#import <netdb.h>
#import <sys/socket.h>
#import <MyTest/MPAppDelegateProxy.h>
现在,在MPAppDelegateProxy,类中,我必须使用我创建的Swift
类。这是:
#import "MPAppDelegateProxy.h"
#import "MyTest.h"
@implementation MPAppDelegateProxy
+ (void)proxyAppDelegate {
[MPGlobal MPLog:@"App delegate not set, unable to perform automatic setup." file:@"MPAppDelegateProxy.m" function:@"proxyAppDelegate" line:32];
// rest of code
}
MPGlobal是我的Swift
课程之一。但我得到了:
未声明标识符“MPGlobal”的使用
注:我在MPGlobal之前添加了@objC
。
发布于 2018-10-08 09:19:56
您需要导入<Target>-Swift.h
文件。这被称为Objective生成的接口头名。
您可以在目标的构建设置中找到它。
这个文件是由编译器自动生成的,需要导入到Objective文件中.
发布于 2018-10-08 09:40:25
更改SWIFT_OBJC_INTERFACE_HEADER_NAME构建设置,并使其在不同目标之间保持相同。为此,请将生成此属性的指令从$(SWIFT_MODULE_NAME)-Swift.h更改为$(PROJECT_NAME)-Swift.h,如解释的这里所示
完成此操作后,按Alt并进入“产品”菜单,即可创建“清洁生成”文件夹。由于头的名称在目标之间共享,现在可以在.m ObjectiveC文件中导入一次,所有目标都可以从Swift类中受益。
如果在构建后仍然显示错误,请确保通过Cmd单击其名称可以从XCode到达标头。它应该打开一个包含类似于以下代码的文件:
SWIFT_CLASS("_TtC27ProjectName_Summary11MyClass")
@interface MyClass : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
如果需要确保生成这些标头,则打开一个终端并使用以下命令
find ~/Library/Developer/Xcode/DerivedData -name "*Swift.h"
您应该看到每个目标的一个标头。
在这些更改之后发生在我身上的另一个问题是,它开始在ObjectiveC代码上产生我没有接触到的错误。这个问题是由于进口的位置造成的,据报道是这里。
在.m文件顶部,您#导入隐藏的桥接标头的位置可能会有所不同。常见的问题迹象是,您得到了一个“未知类型名称”编译错误,其中未知类型是在Objective中声明的类。解决方案是#导入目标-C文件中包含未知类型声明的.h文件,然后再导入隐藏的桥接头。如果目标-C文件不需要知道这个类,但是它解决了这个问题并允许编译进行,那么必须这样做可能会带来麻烦。
最后,代码在设备和模拟器上编译和运行!
您也可以尝试这样做,您需要为框架和应用程序目标导入-Swift.h。
例如:
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
#import <Foundation/Foundation.h>
#import "XLPagerTabStrip-Swift.h"
#import "RealmSwift-Swift.h"
...... // Add all frameworks, subclasses, and dependance ios frameworks
#import "MyProject-Swift.h"
您可以阅读这文章如何导入文件头和检查路径。
https://stackoverflow.com/questions/52698951
复制相似问题