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第三方框架。

相关推荐
Digitally6 小时前
iPhone 无法向安卓设备发送图片:轻松解决
android·ios·iphone
阿里云云原生6 小时前
RUM 助力 iOS 应用稳定性:从异常捕获到堆栈还原的全流程分析
人工智能·阿里云·ios·云原生·rum
初级代码游戏16 小时前
iOS只剩美工了吗?时间都被遮盖看不清了
ios·界面设计·美工
2501_915918411 天前
iOS 开发中证书创建与管理中的常见问题
android·ios·小程序·https·uni-app·iphone·webview
00后程序员张1 天前
IOScer 开发环境证书包括哪些,证书、描述文件与 App ID 的协同管理实践
android·ios·小程序·https·uni-app·iphone·webview
江东小bug王1 天前
深入理解 UITabBarController:代理方法与 ViewController 生命周期的执行顺序(含 UINavigationController 场景)
ios
阿里云云原生1 天前
RUM 赋能 iOS App 稳定:从异常体系到监控方案的全方位解析!
ios·云原生
Zfox_1 天前
无缝穿越系统边界:节点小宝4.0如何让我的Mac/iOS像访问本地盘一样操控Windows
windows·macos·ios·节点小宝
Zender Han1 天前
Flutter 图片裁剪插件 image_cropper 最新版介绍与使用教程
android·flutter·ios
方白羽1 天前
Android 与 iOS 动态更换应用图标实现方案
android·ios·app