我可以在Swift框架库中使用Objective-C类吗?

我创build了一个在多个项目中使用的Swift框架 。 有一个Objectivce-C类,我想用在那个很难直接Swift中移植。 让我们说class级是SFTest

@interface SFTest { } + (NString *)myMethod(NSString *data); @end @implementation SFTest + (NString *)myMethod(NSString *data) { // does some processing return processedData; } @end 

我可以以某种方式在我的Swift框架项目中使用它,如果是,如何? 我在这方面的研究提到了一些所谓的桥接标题,但是它们不能在Swift框架中使用。

所以这花了一段时间,但我终于有东西在我的设备上运行。 这是我的设置。 我创build了一个名为swiftlib的Swift框架。 我添加了一个名为“MyClass”的Objective-C类。 基本上看起来像这样:

在这里输入图像说明

然后我修改了“伞头”来导入我的新的Objective-C类。 伞头是你的swift库项目的名字。 所以在我的情况下,这是“swiftlib.h”。 这是我的伞头文件里面的东西:

 // // swiftlib.h // swiftlib // #import <UIKit/UIKit.h> #import "MyClass.h" //! Project version number for swiftlib. FOUNDATION_EXPORT double swiftlibVersionNumber; //! Project version string for swiftlib. FOUNDATION_EXPORT const unsigned char swiftlibVersionString[]; // In this header, you should import all the public headers of your framework using statements like #import <swiftlib/PublicHeader.h> 

确保将你的头文件类设置为public,否则你会得到一个编译错误。 基本上所有的东西都包含在你的swift框架的用户面前,所以需要公开。 selectMyClass.h并打开正确的详细信息栏并在此处select下拉列表:

在这里输入图像说明

然后,我在一个单一的视图应用程序中使用这个Swift框架进行testing,并能够在AppDelegate.swift中使用我的Objective-C类,如下所示:

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. let test = MyClass.myMethod() print("test = " + String(test)) return true } 

这编译和运行在我的设备上。

对于那些好奇的人来说,这是Objective-C MyClass的实现代码:

 #import "MyClass.h" #import <CommonCrypto/CommonCrypto.h> @implementation MyClass + (NSString *)myMethod { NSString *key = @"test"; NSString *data = @"mytestdata"; const char *ckey = [key cStringUsingEncoding:NSASCIIStringEncoding]; const char *cdata = [data cStringUsingEncoding:NSASCIIStringEncoding]; unsigned char chmac[CC_SHA256_DIGEST_LENGTH]; CCHmac(kCCHmacAlgSHA256, ckey, strlen(ckey), cdata, strlen(cdata), chmac); NSData *hmac = [[NSData alloc] initWithBytes:chmac length:sizeof(chmac)]; NSString *hash = [hmac base64Encoding]; return hash; } @end 

首先在您的swift项目中使用目标c类,您必须在该文件中创build桥接头文件,您必须导入目标c类,然后可以在swift中使用该类