《React Native 精解与实战》书籍连载「iOS 平台与 React Native 混合开发」
此文是我的出版书籍《React Native 精解与实战》连载分享此书由机械工业出版社出版书中详解了 React Native 框架底层原理、React Native 组件布局、组件与 API 的介绍与代码实战以及 React Native 与 iOS、Android 平台的混合开发底层原理讲解与代码实战演示精选了大量实例代码方便读者快速学习。书籍配套视频教程「80 节实战课精通 React Native 开发」此视频课程建议配合书籍学习书籍中原理性的东西讲解的比较清晰而视频教程对于组件、API 等部分的代码实战开发讲解比较直观。书籍所有相关资料请访问http://rn.parryqiu.com之前连载文章列表「80节实战课精通 React Native 开发」视频课程大纲React 与 React Native 简介React Native 底层原理Node.js 简介与 React Native 开发环境配置React Native 中的生命周期React Native 网络请求与列表绑定配置 iOS 与 Android 开发环境本章将详细讲解在 React Native 框架下iOS 平台混合开发的原理以及详细实现方法并依然通过案例进行实际应用学习。本章需要具备 iOS 平台开发语言 Objective-C 或 Swift 以及 iOS 核心类库的基本知识。11.1 iOS 平台混合开发简介当我们需要使用一些 iOS 平台的 API而 React Native 框架目前还没有提供对应的 JavaScript API 时我们就需要自己编写 React Native 框架与 iOS 平台结合的混合开发代码使得 React Native 框架可以直接与 iOS 平台的原生代码进行通信。混合开发的其他使用场景还包括对一些现有的 Objective-C、Swift 或者 C 代码进行复用或者编写一些用于图片处理、数据库或一些其他高级特性的高性能或多线程的代码。React Native 都开放了对应的接口供开发者调用。接下来在原理讲解的章节我们通过结合一个简单的实例详细讲解一下 React Native 中与 iOS 平台混合开发的通信机制这部分内容稍显复杂可能需要反复阅读理解其底层原理并结合小实例进行体会学习在第二部分还将有一个真实的混合开发示例继续加深你对混合开发的理解。这部分内容属于 React Native 开发的高阶内容即使不掌握也不影响你在学习了 React Native 基础知识后进行 App 的开发不过理解并掌握了这部分的话更加有助于你理解 React Native 的底层原理与实现。11.2 iOS 平台混合开发原理详解这一章节我们通过实现在 React Native 框架中调用我们在 Objective-C 中编写的原生代码Objective-C 中的函数返回了一个简单的字符串React Native 框架中通过 JavaScript 代码将字符串获取到在 View 中的 Text 组件上显示。功能虽然简单但是我们主要是通过此简单功能的实现流程深入学习 React Native 中与 iOS 平台结合的混合开发原理。iOS 平台混合开发实现的过程包括如下几个过程在 iOS 平台的原生代码中定义混合开发的入口用于与 React Native 中的 JavaScript 代码进行通信设置 iOS 平台下项目的编译必备设置在 React Native 项目中通过 JavaScript 代码调用混合开发实现的 iOS 平台原生功能。完整代码在本书配套源码的 11-02 文件夹。11.2.1 iOS 原生代码实现原生模块使用 Objective-C 的类定义来实现与 React Native 框架通信的协议接口 RCTBridgeModule注意 RCT 是 ReaCT 取的几个大写字母的缩写。首先我们通过 React Native CLI 命令初始化一个空的项目命令执行如图 11-1 所示。图 11-1 初始化一个空项目使用 Xcode 打开 ios 文件夹下的 xcodeproj 项目文件后续的混合开发我们将在 Xcode 中进行。我们将我们混合开发的模块命名为 MyModule并在 Xcode 中分别建立两个对应的文件一个为头文件 MyModule.h另一个为使用 Objective-C 来实现的类 MyModule.m。建立时可以在 Xcode 新建窗口中选择文件类型如图 11-2 所示。图 11-2 Xcode 下新建文件选择类型头文件 MyModule.m 文件中初始化的代码使用如下代码。1.#importRCTBridgeModule.h2.3.interfaceMyModule:NSObjectRCTBridgeModule4.5.end代码第一行导入了 React Native 框架与原生代码通信的协议头文件 RCTBridgeModule.h。为了通过类对 RCTBridgeModule.h 的实现类中还需要包含 RCT_EXPORT_MODULE() 的宏定义RCT_EXPORT_MODULE() 中还可以传入参数命名自定义原生组件的名称如我们之前定义的文件名为 MyModule这里可以通过传递参数重新定义模块名称RCT_EXPORT_MODULE(RenameMyModule) 这样就将导出的模块命名成了 RenameMyModule。如果不传递参数那么就使用类文件的名称即 MyModule.m 的名称 MyModule。如果模块类文件包含 RCT 开头的文件名那么最终的模块名称将自动不包含 RCT 字符串。MyModule.m 文件中的代码实现如下。1.#importMyModule.h2.3.implementationMyModule4.5.// 需要包含的宏定义6.RCT_EXPORT_MODULE()7.8.// 定义了一个返回的字符串9.-(NSDictionary*)constantsToExport{10.return{hello:你好这是我编写的第一个 iOS 原生模块};11.}12.13.// 定义了一个可被调用的函数14.RCT_EXPORT_METHOD(squareMe:(NSString*)number:(RCTResponseSenderBlock)callback){15.intnum[number intValue];16.callback([[NSNull null],[NSNumber numberWithInt:(num*num)]]);17.}18.19.end此段代码定义了一个固定的字符串输出方法为 constantsToExport返回了名称为 hello 的字符串。第二个定义了一个可以供 React Native 的 JavaScript 代码调用的函数函数功能非常简单就是将传递过来的 int 参数进行平方计算计算后将计算的值返回。函数的定义需要使用宏命令 RCT_EXPORT_METHOD 进行显式地定义。定义的函数都会被异步地调用所以函数的定义不是直接使用 return 返回一个值和固定的字符串返回不一样。squareMe 是定义了此函数的函数名称参数为一个 NSString 型的值名称为 number另一个参数为函数的回调函数用于获取原生代码的执行结果。函数的 callback 第一个参数为错误的返回这里没有错误就返回了一个 null第二个为计算后的值供函数回调使用。11.2.2 iOS 项目编译设置如上代码都编写完成后在 Xcode 中执行项目编译点击 Xcode 中的 Build 命令如图 11-3 所示。图 11-3 Xcode 项目的编译如果在编译时遇到 fatal error: ‘RCTBridgeModule.h’ file not found 的错误即 RCTBridgeModule.h 文件找不到的问题错误如图 11-4 所示。图 11-4 RCTBridgeModule.h 文件找不到的错误解决的方法为在 Xcode 的项目设置“Build Settings”选项卡下找到“Header Search Paths”设置节点并确认在其中包含了如图 11-5 所示的定义即添加了 $(SRCROOT)/…/node_modules/react-native/React 值的定义并在下拉选项中选择了“recursive”。图 11-5 设置 Xcode 的 Search Paths进行了如上的设置后再次编译项目即可解决此错误问题。

相关新闻

Unity动画进阶:用Parent Constraints实现动态装备绑定与切换

Unity动画进阶:用Parent Constraints实现动态装备绑定与切换

1. 项目概述:从父子关系到约束驱动的装备绑定革命 如果你是一位Unity动画师或者技术美术,肯定对“父子关系”这个词又爱又恨。爱它,是因为它简单直观,把一把剑拖到角色的手上,层级视图里一放,装备就跟着手动…

2026/10/15 5:26:45 阅读更多 →
UE5 FPS教程第十章:交互系统与AI行为树实战解析

UE5 FPS教程第十章:交互系统与AI行为树实战解析

1. 项目概述:UE5官方FPS教程第十章的核心价值 如果你正在跟着UE5官方的第一人称射击游戏(FPS)教程一步步搭建自己的游戏,那么到了第十章,你大概率已经从一个蓝图新手,变成了能熟练摆弄角色控制器、动画蓝图…

2026/10/13 7:08:15 阅读更多 →
如何用DyberPet打造你的专属桌面宠物:从入门到创意玩法

如何用DyberPet打造你的专属桌面宠物:从入门到创意玩法

如何用DyberPet打造你的专属桌面宠物:从入门到创意玩法 【免费下载链接】DyberPet Desktop Cyber Pet Framework based on PySide6 项目地址: https://gitcode.com/GitHub_Trending/dy/DyberPet 厌倦了单调的桌面背景?想让喜欢的角色陪你一起工作…

2026/10/6 7:10:32 阅读更多 →

最新新闻

嵌入式验证性实验:从跑通代码到写出真正的实验体会

嵌入式验证性实验:从跑通代码到写出真正的实验体会

简介:苏州大学金葫芦平台下的《嵌入式系统》六个验证性实验,以一份Word实验报告完整呈现:实验一熟悉AHL-GEC-IDE环境、GPIO构件调用及输入输出控制,实验二串行接收中断、多字节组帧与C#串口调试,实验三PWM信号生成及占…

2026/10/15 5:26:11 阅读更多 →
STM32嵌入式实验全解析:RTOS调度机制与调试避坑指南

STM32嵌入式实验全解析:RTOS调度机制与调试避坑指南

简介:基于苏州大学金葫芦平台(STM32L431)的《嵌入式系统》验证性实验报告合集,面向高校嵌入式课程学习者、准备实验考核的学生及开发者。资源完整覆盖GPIO、串口中断、PWM、Flash、SPI及独立看门狗六个由浅入深的实验,…

2026/10/15 5:26:11 阅读更多 →
两串电池主动均衡设计与实现:从最小系统到系统联动

两串电池主动均衡设计与实现:从最小系统到系统联动

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 5:26:11 阅读更多 →
概率论第九章:参数估计与假设检验的学习方法与解题套路

概率论第九章:参数估计与假设检验的学习方法与解题套路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 5:26:11 阅读更多 →
wangEditor图片视频上传配置实践与常见坑点全解析

wangEditor图片视频上传配置实践与常见坑点全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 5:26:11 阅读更多 →
有界与冻结:对话系统跨会话记忆双闸设计实战

有界与冻结:对话系统跨会话记忆双闸设计实战

在对话系统和大模型应用里摸爬滚打久了,你迟早会撞上一个尴尬场景:用户上周明明跟你聊过“家里小孩对花生过敏”,这周回来你热情推荐了一款含花生碎的曲奇配方。用户没发火,但你心里清楚——这个系统失忆了。跨会话记忆不是什么新…

2026/10/15 5:25:11 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →