![](/img/trans.png)
[英]Unable to import Swift class in Objective-C code in a framework project
[英]Swift framework - Use Swift class reference in Objective-C class
我正在创建必须使用Objective-C类的Swift框架。 所以我浏览了此链接。 这是我框架的公共头文件:
#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”
注意:我在@objC
之前添加了@objC 。
更改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文件顶部的#import位置,隐藏的桥接标头可以有所作为。 麻烦的通常迹象是,您收到“未知类型名称”的编译错误,其中未知类型是在Objective-C中声明的类。 解决方案是,在#import隐藏的桥接头文件之前,#import .h文件也包含Objective-C文件中的未知类型的声明。 这样做可能会很烦,特别是如果所讨论的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"
您可以阅读此文章如何导入文件头和检查路径
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.