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

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...