IOS 06 OC调用Swift第三方框架

前面文章05讲的是在OC项目中,调用Swift代码,而在真实开发过程中,在OC项目中调用Swift第三方框架场景用的是非常多的,所以我们也了解在OC项目如何使用Swift写的三方框架。

实现流程:

1、OCUseSwiftTest;在上一篇文章的基础上,通过Pod安装Swift第三方框架,例如:Charts框架,他是一个使用Swift语言编写的图表框架,同时他是兼容OC调用的才能在OC代码中调用,所以并不是所有Swift框架都能在OC中使用,这一步是正常使用。

2、在桥接文件中导入第三方Swift框架。

3、最后就能正常使用Swift框架中的内容了。

添加依赖

还不了解如何使用 CocoaPods 管理依赖的,建议先看前面的文章:IOS 01 CocoaPods 安装与使用

复制代码
#图表框架
#https://github.com/danielgindi/Charts
pod 'Charts'

然后通过命令 pod install 安装依赖。

注意:本文中的Charts框架,不是说一定要用该框架,只是该框架正好能在OC中调用,同时在iOS开发中也挺常用,所以顺带了解一下它的使用。

在桥接文件中导入

OCUseSwiftTest-Bridging-Header.h

objectivec 复制代码
//在这个文件导入第三方Swift框架模块
@import Charts;

同样,其他的Swift框架,也要在这里导入。

使用Swift框架

首先通过可视化创建一个View控件,class指向LineChartView,然后关联到代码逻辑文件ViewController.m

objectivec 复制代码
//
//  ViewController.m
//  OCUseSwiftTest
//
//  Created by jin on 2024/8/16.
//

#import "ViewController.h"

//导入桥接文件
#import "OCUseSwiftTest-Bridging-Header.h"
#import "OCUseSwiftTest-Swift.h"

@interface ViewController ()<ChartViewDelegate>
@property (weak, nonatomic) IBOutlet LineChartView *chartView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    
}


@end

显示一个折线图

objectivec 复制代码
//
//  ViewController.m
//  OCUseSwiftTest
//
//  Created by jin on 2024/8/16.
//

#import "ViewController.h"

//导入桥接文件
#import "OCUseSwiftTest-Bridging-Header.h"
#import "OCUseSwiftTest-Swift.h"

@interface ViewController ()<ChartViewDelegate>
@property (weak, nonatomic) IBOutlet LineChartView *chartView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    
    //显示一个折线图

    //要显示的数据,例如:模拟爱学啊1~6月份,收入金额
    NSArray *datas = @[@30,@40,@80,@70,@20,@20,@30];

    NSMutableArray *array = [NSMutableArray array];
    for (int i=0; i<datas.count; i++) {
        //创建ChartDataEntry对象并将每个点对应的值与x轴 y轴进行绑定
            //x就是月份,y就是值
        ChartDataEntry *entry = [[ChartDataEntry alloc] initWithX:i+1 y:[datas[i] intValue]];
        [array addObject:entry];
    }

    //创建一个集合并为这个集合赋值 label的值可为空
    LineChartDataSet *set = [[LineChartDataSet alloc] initWithEntries:array label:@"收入金额"];

    //创建容器
    LineChartData *chartData = [[LineChartData alloc] initWithDataSet:set];

    self.chartView.data = chartData;

    //以动画的方式绘制折线,动画持续2.5秒
    [_chartView animateWithXAxisDuration:2.5];
}


@end

增加折线图框架代理方法

objectivec 复制代码
//
//  ViewController.m
//  OCUseSwiftTest
//
//  Created by jin on 2024/8/16.
//

#import "ViewController.h"

//导入桥接文件
#import "OCUseSwiftTest-Bridging-Header.h"
#import "OCUseSwiftTest-Swift.h"

@interface ViewController ()<ChartViewDelegate>
@property (weak, nonatomic) IBOutlet LineChartView *chartView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    //显示一个折线图

    //设置代理,通过他可以监听一些事件
    _chartView.delegate = self;

    //要显示的数据,例如:模拟爱学啊1~6月份,收入金额
    NSArray *datas = @[@30,@40,@80,@70,@20,@20,@30];

    NSMutableArray *array = [NSMutableArray array];
    for (int i=0; i<datas.count; i++) {
        //创建ChartDataEntry对象并将每个点对应的值与x轴 y轴进行绑定
            //x就是月份,y就是值
        ChartDataEntry *entry = [[ChartDataEntry alloc] initWithX:i+1 y:[datas[i] intValue]];
        [array addObject:entry];
    }

    //创建一个集合并为这个集合赋值 label的值可为空
    LineChartDataSet *set = [[LineChartDataSet alloc] initWithEntries:array label:@"收入金额"];

    //创建容器
    LineChartData *chartData = [[LineChartData alloc] initWithDataSet:set];

    self.chartView.data = chartData;

    //以动画的方式绘制折线,动画持续2.5秒
    [_chartView animateWithXAxisDuration:2.5];
}

/// 选中图表中数值
/// @param chartView <#chartView description#>
/// @param entry <#entry description#>
/// @param highlight <#highlight description#>
-(void)chartValueSelected:(ChartViewBase *)chartView entry:(ChartDataEntry *)entry highlight:(ChartHighlight *)highlight{
    NSLog(@"选中图表中数值");
}


/// 选中空白区域
/// @param chartView <#chartView description#>
-(void)chartValueNothingSelected:(ChartViewBase *)chartView{
    NSLog(@"选中空白区域");
}

/// 图表缩放
/// @param chartView <#chartView description#>
/// @param scaleX <#scaleX description#>
/// @param scaleY <#scaleY description#>
-(void)chartScaled:(ChartViewBase *)chartView scaleX:(CGFloat)scaleX scaleY:(CGFloat)scaleY{
    NSLog(@"图表缩放");
}


/// 图表移动
/// @param chartView <#chartView description#>
/// @param dX <#dX description#>
/// @param dY <#dY description#>
-(void)chartTranslated:(ChartViewBase *)chartView dX:(CGFloat)dX dY:(CGFloat)dY{
    NSLog(@"图表移动");
}


@end

至此完成了在OC项目中调用Swift第三方框架。

相关推荐
鸿蒙布道师1 小时前
鸿蒙NEXT开发图片相关工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
Unlimitedz16 小时前
iOS内存管理中的强引用问题
macos·ios·cocoa
雨夜赶路人17 小时前
iOS开发--接入ADMob广告失败
ios
旭日猎鹰18 小时前
iOS崩溃堆栈分析
ios
SY.ZHOU18 小时前
Flutter 与原生通信
android·flutter·ios
鸿蒙布道师21 小时前
鸿蒙NEXT开发文件预览工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
鸿蒙布道师21 小时前
鸿蒙NEXT开发全局上下文管理类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
归辞...1 天前
【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数(二)
笔记·ios·cocoa
码客前端1 天前
ios接入穿山甲【Swift】
macos·ios·cocoa
键盘敲没电1 天前
【iOS】UITableView性能优化
ios·性能优化·ipad