gpt4 book ai didi

objective-c - 如何通过 Carthage 在 Obj-C 项目中使用 Swift 库

转载 作者:搜寻专家 更新时间:2023-11-01 06:17:28 24 4
gpt4 key购买 nike

我一直在开发一个支持 Xcode 8.2 和 iOS8~ 的 objc 项目。

我通过 Carthage 安装了一个 swift 库 ( https://github.com/danielgindi/Charts ),但是如果我调用这个库的任何方法,应用程序会崩溃并出现“无法识别的选择器发送到实例”错误。

我可以通过 Cocoapods 让它工作,但是当我将 Swift 库与 Cocoapods 一起使用时构建时间会非常慢,所以我想尽可能使用 Carthage。

有没有办法通过 Carthage 在 objc 项目中使用 swift 库?

基本上,我是根据页面通过Carthage安装Charts库的。 https://github.com/Carthage/Carthage/blob/master/README.md

我只使用嵌入式二进制文件来添加 Charts.framework 而不是 Linked Frameworks,因为它解决了启动时的崩溃问题。

最佳答案

Is there any way to use swift library in objc project via Carthage?

将 Charts.framework 添加到项目设置中的嵌入式二进制文件后,您可以将 Swift 代码导入 ObjC,如下所示。例如,对于名为 ChartsObjCSample 的示例项目,您需要:

import "ChartsObjCSample-Swift.h"

现在您应该能够在您的 ObjC 代码中使用 Charts API。

但是,有时上面的 -Swift.h 文件不会创建,在这种情况下,您可以创建一个虚拟 Swift 文件,按照 Xcode 说明添加 brining header ,然后清理, 再次构建,这应该会创建 -Swift.h 文件。

最后,要使用 Charts API 创建条形图,您可以有一个 ViewController,其 Storyboard View 类指定为 BarChartView,如下所示。

enter image description here

然后 View Controller 可以使用如下代码呈现条形图:

#import "ViewController.h"
#import "ChartsObjCSample-Swift.h"
@import Charts;

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
BarChartView* barChartView = (BarChartView*)self.view;

NSMutableArray* dataEntries = [[NSMutableArray alloc] init];
for(int i = 0; i < 100; i++) {
BarChartDataEntry* dataEntry = [[BarChartDataEntry alloc] initWithX:5.0 * arc4random_uniform(12) y:100.0];
[dataEntries addObject:dataEntry];
}

BarChartDataSet* dataSet = [[BarChartDataSet alloc] initWithValues:dataEntries label:@"Visitor Count"];

BarChartData* barChartData = [[BarChartData alloc] initWithDataSet:dataSet];
barChartView.data = barChartData;
}


- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}


@end

渲染柱状图截图:

enter image description here


以上示例代码可在 GitHub here 上获得.


来自 apple docs :从同一目标将 Swift 代码导入 Objective-C

使用此语法并替换适当的名称,将 Swift 代码从该目标导入到该目标内的任何 Objective-C .m 文件中:

#import "ProductModuleName-Swift.h"

关于objective-c - 如何通过 Carthage 在 Obj-C 项目中使用 Swift 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41326627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com