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

凯龙

我创建了一个Swift框架,可以在多个项目中使用。我想在其中使用Objectivce-C类,因为它很难直接移植到Swift中。可以说该类是SFTest

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

我可以在我的Swift框架项目中以某种方式使用它吗?如果可以,如何使用?我对此的研究提到了一种称为桥接标头的东西,但它们不能在Swift框架中使用。

凯龙

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

在此处输入图片说明

然后,我修改了“伞头”以导入新的Objective-C类。伞头是您的快速库项目的名称。因此,在我的情况下,它是“ 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框架的用户公开,因此它需要公开。选择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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以使用Xamarin / Portable类库来构建可由Swift或Objective-C使用的C#库吗?

我可以在离子框架中使用自定义Java类库吗?

我可以在.NET Standard类库中使用动态吗?

我可以在我的C程序中使用LXC库吗?

我可以在 4.6.2 版本的 Visual Studio 项目中使用针对 4.5.1 .net 框架的库吗

我可以在 Xamarin 中使用任何 C# 库吗

我们可以使用Objective-C类别来扩展C ++类吗?

我可以在 React Native 自定义模块 IOS 中使用 swift 和 Objective c 的组合吗?

在Objective-C框架中使用Swift闭包

在Xcode Swift项目中使用Objective C框架

如何在框架的Objective-C文件中使用Swift类?

如何在框架中使用Swift扩展Objective-C类?

在Objective-C中使用Swift类

可以在C ++类中使用位字段吗?

我可以强制C ++类是非抽象类吗?

我可以在实体框架分页语法中使用 join 吗?

可以在Objective-C程序中使用C ++ 11功能和库吗?

C ++类管理Objective-C类的寿命吗?

我可以在C#的2个不同的类中使用相同的枚举吗?

我们可以在C ++类的成员函数中使用cin >>吗?

我可以在单个 Java 类库中使用 RxJava2 和 RxAndroid 吗?

我们可以在C ++代码中使用像coremotion这样的iOS框架吗

在Xamarin iOS项目中使用Swift框架内的Objective C框架

C ++:模板可以成为类的朋友吗?

我可以在Objective-C中的协议中使用__kindof吗?

是否可以在 Objective-c 中使用 YouTubePlayer-Swift?

我可以在cgo中使用c ++吗?

我可以在C ++中使用Tk吗?

C ++可以初始化基类的基类吗?