我一直在开发具有Xcode 8.2和iOS8〜支持的objc项目。
我通过迦太基安装了一个快速库(https://github.com/danielgindi/Charts),但是如果我调用该库的任何方法,则应用程序会崩溃,并显示“无法识别的选择器已发送至实例”错误。
我可以通过Cocoapods使其工作,但是当我将Swift库与Cocoapods一起使用时,构建时间将非常缓慢,因此,如果可能的话,我想使用Carthage。
有什么方法可以通过Carthage在objc项目中使用swift库吗?
基本上,我是根据页面通过迦太基安装了Charts库的。https://github.com/Carthage/Carthage/blob/master/README.md
我只使用嵌入式二进制文件来添加Charts.framework而不是链接框架,因为它解决了启动时的崩溃问题。
有什么方法可以通过Carthage在objc项目中使用swift库吗?
将Charts.framework添加到项目设置中的“嵌入式二进制文件”后,可以按以下方式将Swift代码导入到ObjC中。例如,对于一个名为的示例项目ChartsObjCSample
,您需要:
import "ChartsObjCSample-Swift.h"
现在,您应该可以在ObjC代码中使用Charts API。
但是,有时-Swift.h
没有创建上述文件,在这种情况下,您可以创建一个虚拟Swift文件,按照Xcode指令添加brining标头,然后再次清理,构建,这将创建该-Swift.h
文件。
最后,要使用Charts API例如创建BarChart,您可以具有一个ViewController,并BarChartView
为其分配了故事板视图类,如下所示。
然后,视图控制器可以使用以下代码呈现BarChart:
#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
呈现的条形图的屏幕截图:
上面的示例代码可在GitHub上获得。
从Apple Docs:要将Swift代码从同一目标导入到Objective-C中
使用以下语法并替换适当的名称,将Swift代码从该目标导入到该目标内的任何Objective-C .m文件中:
#import "ProductModuleName-Swift.h"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句