当前位置: 首页 > 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; 确保所选的源码能够支持企业所…...

MongoDB快速入门CRUD

1. 数据库管理 1.1 切换数据库 切换到名为 myDatabase 的数据库。如果该数据库不存在&#xff0c;MongoDB 会在第一次写入数据时自动创建它。 use myDatabase;1.2 查看当前数据库 显示当前使用的数据库的名称。 db; 1.3 显示所有数据库 列出当前 MongoDB 实例中的所有数…...

【python基础】—利用pandas读取或写入mysql表数据

文章目录 一、read_sql()二、to_sql()三、连接数据库方式—MySQL1、用sqlalchemy包构建数据库链接2、用DBAPI构建数据库链接 四、容易遇到的问题 一、read_sql() 功能 将 SQL 查询/数据库表读入 DataFrame。 语法 读取数据库&#xff08;通过SQL语句或表名&#xff09; pand…...

C/C++信号量

文章目录 一、信号量介绍1.1 什么是信号量1.2 信号量的原子性1.3 信号量的使用 二、C语言使用2.1 函数接口2.2 信号量代码 三、C20使用3.1 函数接口 四、C11模拟信号量 一、信号量介绍 1.1 什么是信号量 信号量是一种特殊的变量&#xff0c;是操作系统层面的&#xff0c;可以…...

SSL Pining 问题解决方案

实战案例 为了能够更好的复现 SSL Pining 场景&#xff0c;我们对一个 App&#xff08;https:app4.scrape.center&#xff09;进行抓包&#xff0c;这个 App 包含了 SSL Pining 的相关设置&#xff0c;如果我们将手机的代理设置为抓包软件提供的代理服务&#xff0c;那么这个 …...

【Spring Boot】全局异常处理

目录 背景 前言 设计步骤 1.定义异常信息类&#xff1a; 2.自定义异常&#xff1a; 3.创建全局异常处理类 4.在控制器中抛出异常 5.输出 捕获 Valid 校验异常 背景 去面试的时候被问到SpringBoot项目中&#xff0c;如何处理全局异常的&#xff0c;也就是如何捕获全局异…...

安全基础学习-SM3加密算法

SM3是一种广泛使用在中国国家标准中的哈希算法,全称为“中国国家密码算法SM3”。它由中国国家密码管理局制定,主要用于数字签名和消息完整性验证。SM3算法与SHA-256在结构上类似,但其设计具有特定的改进以增强安全性。 SM3算法生成256位的哈希值,使用了32轮的迭代运算,并…...

MySQL中处理JSON数据:大数据分析的新方向

1. 简介 1.1. 概述 在MySQL中处理JSON数据的能力是在MySQL 5.7版本中引入的,并在后续的版本中不断得到增强。这使得MySQL能够直接操作和查询JSON格式的数据,极大地扩展了其处理复杂数据结构的能力。 1.2. 主要特点 灵活性与可扩展性 :JSON允许开发者存储不规则和嵌套的数…...

K8S 容器调度

在Kubernetes中&#xff0c;容器调度是一个自动化的过程&#xff0c;负责将容器&#xff08;在Kubernetes中称为Pod&#xff09;分配到集群中的合适节点上运行。这一过程由Kubernetes的调度器&#xff08;kube-scheduler&#xff09;控制&#xff0c;它通过一系列算法和策略来确…...

C++ //练习 17.2 定义一个tuple,保存一个string、一个vector<string>和一个pair<string, int>。

C Primer&#xff08;第5版&#xff09; 练习 17.2 练习 17.2 定义一个tuple&#xff0c;保存一个string、一个vector和一个pair<string, int>。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /**********************…...

外观检测设备真的能提高生产效率吗?

零部件外观检测设备是一种专业的设备&#xff0c;用于对各类零部件的外观进行检测和评估。现代制造业中扮演着重要的角色&#xff0c;能够有效提升产品质量&#xff0c;确保产品符合国家标准和客户需求。 首先&#xff0c;零部件外观检测设备具备高精度和高效率的特点。通过采用…...