所以这需要一段时间,但我终于在我的设备上运行了一些东西。这是我的设置。我创建了一个名为 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>
确保将头文件类设置为公共,否则会出现编译错误。基本上,伞形标题中包含的任何内容都会向您的 swift 框架的用户公开,因此它需要公开。选择 MyClass.h 并打开右侧的详细信息栏并选择此处的下拉列表:
然后我在单视图应用程序中使用这个 Swift 框架进行测试,并且能够像这样在 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