我正在创建必须使用Objective-C类的Swift框架。因此,我通过了this链接。这是我框架的公共标头:
#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
。
答案 0 :(得分:0)
答案 1 :(得分:0)
更改 SWIFT_OBJC_INTERFACE_HEADER_NAME 构建设置,并使其在不同目标上相同。为此,请按照here
中的说明,将生成此属性的指令从 $(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代码带来错误。问题是由于here报告的导入位置引起的:
.m文件的确切位置是#import隐藏的桥接 标头可以有所作为。通常麻烦的迹象是你 出现“未知类型名称”编译错误,其中未知类型是 在Objective-C中声明的类。解决方案是#import .h文件 在Objective-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"
您可以阅读this文章如何导入文件头并检查路径