当前位置: 首页 > news >正文

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

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

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

使用Swift框架

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

//
//  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

显示一个折线图

//
//  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

增加折线图框架代理方法

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

相关文章:

IOS 06 OC调用Swift第三方框架

前面文章05讲的是在OC项目中&#xff0c;调用Swift代码&#xff0c;而在真实开发过程中&#xff0c;在OC项目中调用Swift第三方框架场景用的是非常多的&#xff0c;所以我们也了解在OC项目如何使用Swift写的三方框架。 实现流程&#xff1a; 1、OCUseSwiftTest&#xff1b;在…...

SAP和致远OA系统集成案例

一、项目介绍 重庆某控股&#xff08;集团&#xff09;有限公司是一家集合汽柴油动力及终端、摩托车、储能电源、汽车零部件、金融服务等产业的多元化集团公司&#xff0c;业务遍布全球80多个国家及地区&#xff0c;2021年营业收入达80亿元。 为推动集团信息化、数字化转型…...

19 OptionMenu 组件

OptionMenu 组件使用指南 Tkinter 的 OptionMenu 组件是一个下拉选择框&#xff0c;允许用户从一组预定义的选项中选择一个。它通常用于提供用户一个有限的选项集合来选择。以下是对 OptionMenu 组件的详细说明和一个使用案例。 OptionMenu 组件属性 variable: 与 OptionMen…...

【C语言】字符函数与字符串函数(上)

字符函数与字符串函数&#xff08;上&#xff09; 文章目录 字符函数与字符串函数&#xff08;上&#xff09;1.字符分类函数2.字符转换函数3.strlen的使用和模拟实现3.1使用示例&#xff1a;3.2模拟实现 4.strcpy的使用和模拟实现4.1使用示例:4.2模拟实现 5.strcat的使用和模拟…...

机器学习系列—深入探索弗里德曼检验:非参数统计分析的利器

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…...

【ubutnu18.04】k8s 部署4: worker节点配置1.31.0和containerd 1.7.20

上一篇:【ubutnu24.04】k8s部署3:重新安装1.31.0并init成功 worker 节点之一是ubuntu18.04主要参考 How Install Kubernetes on Ubuntu 24.04 (Step-by-Step Guide) 重点参考 ubuntu24.04 作为master反复配置kubelet root@PerfSvr:/home/zhangbin/perfwork/k8sadmin# sudo kub…...

android kotlin集成WorkManager实现定时获取数据

在Android中使用Kotlin集成WorkManager来实现定时获取数据是一个很常见的需求。WorkManager可以帮助你在设备处于闲置或应用被关闭时执行后台任务&#xff0c;特别适用于需要在特定时间间隔内重复执行的任务。以下是实现步骤&#xff1a; 1. 添加依赖项 首先&#xff0c;在你…...

BvSP_ Broad-view Soft Prompting for Few-Shot Aspect Sentiment Quad Prediction

BvSP: Broad-view Soft Prompting for Few-Shot Aspect Sentiment Quad Prediction 英文题目BvSP: Broad-view Soft Prompting for Few-Shot Aspect Sentiment Quad Prediction中文题目BvSP&#xff1a;面向少样本方面情感四元预测的广视角软提示论文地址aclanthology.org/202…...

React+Vis.js(05):vis.js的节点的点击事件

文章目录 需求实现思路抽屉实现完整代码需求 双击节点,弹出右侧的“抽屉”,显示节点的详细信息 实现思路 vis.network提供了一个doubleClick事件,代码如下: network.on(doubleClick, function (properties) {// console.log(nodes);let id = properties...

今日(2024 年 8 月 19 日)科技新闻

科大讯飞推出星火极速超拟人交互&#xff1a;8 月 19 日&#xff0c;科大讯飞宣布星火语音大模型更新&#xff0c;正式推出星火极速超拟人交互&#xff0c;并将其能力落地在讯飞星火 APP “小星畅聊” 功能中。该交互响应速度更快&#xff0c;能感知用户情绪变化并共情回应&…...

Python 虚拟环境

为什么要创建虚拟环境 创建 Python 虚拟环境的主要目的是为了解决依赖管理的问题&#xff0c;特别是在开发多个项目或部署应用程序时&#xff0c;虚拟环境具有以下几个优势&#xff1a; 依赖隔离&#xff1a; 不同的项目可能需要不同版本的 Python 解释器和库。通过创建虚拟环…...

Redis RDB三两事

rdb&#xff1a;将数据库的快照以二进制格式保存在文件中&#xff0c;redis重启后直接加载数据。可以通过save和bgsave命令生成rdb。当然我们可以在生成rdb文件时指定规则&#xff0c;例如 save 60 1000 如果60秒内不少于1000个key发生了改动&#xff0c;则生成一个新的rdb文件…...

分布式高可用架构设计

一、限流 1、单机限流 如图&#xff0c;应用C的资源c/x被上游的应用A和应用C并发访问&#xff0c;应用C的系统能力支持c/x资源最高5000/qps的访问量&#xff1b;为了不让高并发流量或尖峰流量压垮应用C&#xff0c;可以针对应用C的资源c/x做限流&#xff1b;比如设置限流4500…...

GATK SampleList接口介绍

在 GATK 中,SampleList 是一个接口,用于表示一个样本列表。这些样本通常是在基因组分析过程中被处理的不同生物样本。SampleList 接口提供了访问这些样本的一些基本方法,通常用于多样本分析任务,比如变异检测或基因组重测序。 SampleList 接口的方法 SampleList 接口定义…...

00后是真卷不过,工作没两年,跳槽到我们公司起薪20K都快接近我了

在程序员职场上&#xff0c;什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事&#xff0c;我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事&#xff0c;可遇不可求&#xff0c;向他学习还来不及呢。 真正让人反感的&#xff0c;是技术平平&…...

树莓派Pico C/C++ 开发环境搭建(一键完成版)

树莓派Pico C/C 开发环境搭建(一键完成版) 因为之前使用过MicroPython开发过树莓派Pico&#xff0c;总觉得用起来怪怪的。正好最近树莓怕发布了新一代的MCU——RP2350&#xff0c;之前的RP2040在各个平台都有所降价&#xff0c;因此&#xff0c;买了几块。同时因为之前是玩stm…...

【计算机组成原理】二、数据的表示和运算:1.数值与编码(十进制二进制转换、BCD码、ASCII码、汉字编码、奇偶校验码、循环冗余检测CRC、海明码)

二、数据的表示和运算 文章目录 二、数据的表示和运算1.数值与编码1.1数据存储和排列❗1.2十进制转换1.2.1整数1.2.2小数 1.3二进制转换1.3.1 B->O1.3.2 B->H 1.4真值&机器数1.5 BCD码1.6 ASCII码1.7汉字与GBK1.8 UTF1.9检错码1.9.1奇偶校验码1.9.2循环冗余检测CRC1.…...

汇编语言中的艺术:数据压缩与解压缩技术

标题&#xff1a;汇编语言中的艺术&#xff1a;数据压缩与解压缩技术 数据压缩是计算机科学中的一项基本技术&#xff0c;它通过减少数据的冗余来降低存储或传输所需的空间。在低级语言如汇编语言中实现数据压缩和解压缩&#xff0c;不仅是一种技术挑战&#xff0c;也是对硬件…...

【Alibaba Cola 状态机】重点解析以及实践案例

【Alibaba Cola 状态机】重点解析以及实践案例 1. 状态模式 状态模式是一种行为型设计模式&#xff0c;允许对象在内部状态改变时改变其行为&#xff0c;简单地讲就是&#xff0c;一个拥有状态的context对象&#xff0c;在不同状态下&#xff0c;其行为会发生改变。看起来是改…...

购买商城源码前需要考虑哪些方面?

前言 购买商城源码前需要考虑的方面包括功能满足、技术兼容性、可扩展性、公司实力、客户评价、安全性与稳定性等。 购买商城源码是一项重要决策&#xff0c;需要综合考虑多个因素。以下是详细的考虑方面&#xff1a; 1.功能满足&#xff1a; 确保所选的源码能够支持企业所…...

一个关键词的SEO优化过程中需要注意什么

一个关键词的SEO优化过程中需要注意什么 在数字营销的世界里&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;是一个核心的组成部分。其中&#xff0c;关键词优化是SEO策略的关键环节。对于一个关键词的SEO优化过程中&#xff0c;有许多细节需要注意&#xff0c;以确保最…...

别再死记硬背分度表了!用Python+Arduino动手复现K型热电偶测温全过程

别再死记硬背分度表了&#xff01;用PythonArduino动手复现K型热电偶测温全过程 温度测量是工程实践中最基础却又最关键的环节之一。想象一下&#xff0c;当你需要监控3D打印机热床温度、测量自制咖啡烘焙机的内部环境&#xff0c;或是记录太阳能热水器的水温变化时&#xff0c…...

别只盯着PID!用STM32的PWM差速控制,让你的循迹小车转弯更稳(附源码分析)

STM32 PWM差速控制&#xff1a;让循迹小车转弯更稳的实战技巧 循迹小车的核心挑战之一是如何实现平滑稳定的转弯控制。许多开发者习惯性地直接套用PID算法&#xff0c;却忽略了更基础的PWM差速控制策略。实际上&#xff0c;通过精心设计的PWM占空比调整方案&#xff0c;完全可以…...

2026 年4月深圳高精度 TOF 传感器,这些推荐值得关注!

随着科技的飞速发展&#xff0c;高精度TOF&#xff08;Time of Flight&#xff09;传感器在众多领域的应用越来越广泛。从智能家居到自动驾驶&#xff0c;从工业自动化到医疗成像&#xff0c;TOF传感器的市场需求呈现出爆发式增长。今天&#xff0c;我们就来聊聊2026年值得关注…...

Diablo Edit2实战解决方案:从存档修复到角色定制的完整指南

Diablo Edit2实战解决方案&#xff1a;从存档修复到角色定制的完整指南 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 在暗黑破坏神II的冒险旅程中&#xff0c;每位玩家都可能遭遇存档损坏、属性…...

OpenGL渲染与几何内核那点事-项目实践理论补充(二-1-(1):当你的CAD学会“想象”:图形技术与AI融合的三个层次)

TOC 代码仓库入口&#xff1a; github源码地址。gitee源码地址。 系列文章规划&#xff1a; (OpenGL渲染与几何内核那点事-项目实践理论补充&#xff08;一-1-&#xff08;1&#xff09;&#xff1a;从开发的视角看下CAD画出那些好看的图形们))OpenGL渲染与几何内核那点事-项…...

OpenClaw环境隔离方案:Phi-3-vision-128k-instruct多模态任务专用沙箱配置

OpenClaw环境隔离方案&#xff1a;Phi-3-vision-128k-instruct多模态任务专用沙箱配置 1. 为什么需要环境隔离&#xff1f; 去年我在尝试用OpenClaw处理一批包含敏感客户数据的PDF文件时&#xff0c;曾因为一个错误的鼠标操作指令导致系统临时文件被意外删除。那次经历让我意…...

事件驱动:为AI原生应用领域注入新活力

事件驱动&#xff1a;为AI原生应用领域注入新活力关键词&#xff1a;事件驱动、AI原生应用、事件流、实时响应、异步架构、微服务、事件溯源摘要&#xff1a;本文将带你走进「事件驱动」与「AI原生应用」的交叉领域&#xff0c;通过生活案例、技术原理解析和实战代码&#xff0…...

光伏并网发电系统最大功率点跟踪(MPPT)技术研究

光伏并网发电系统最大功率点跟踪(MPPT)技术研究 第一章 绪论 1.1 研究背景与意义 随着全球能源危机和环境污染问题的日益严峻,太阳能作为一种取之不尽、用之不竭的清洁能源,受到了广泛关注。光伏并网发电系统已成为太阳能利用的主要形式。然而,光伏电池的光电转换效率较…...

收藏备用!AI大模型自学路线(小白/程序员专属),从入门到实战少走90%弯路

当下AI大模型已成技术领域的核心热点&#xff0c;无论是零基础小白&#xff0c;还是想转型进阶的程序员&#xff0c;都纷纷投身其中。但自学过程中&#xff0c;多数人都会陷入“找不到方向、学了不会用、越学越迷茫”的困境。今天就为大家整理一份系统、可落地、无冗余的AI大模…...