This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
使用 SwiftUI 扩展
了解如何创建可与 Expo UI 集成的自定义 SwiftUI 组件和修饰符。
本指南介绍如何使用 Expo Modules API 创建与 Expo UI 集成的自定义 SwiftUI 组件和修饰符。
3 requirements
3 requirements
1.
@expo/ui 已安装在你的项目中安装 @expo/ui。更多信息请参阅 Expo UI 中的 SwiftUI 组件。
2.
自定义 Expo 模块包含原生代码,Expo Go 无法加载。请为你的应用创建开发构建。
3.
本指南假设你基本了解 Expo Modules API 和 SwiftUI。
创建自定义组件
项目设置
1
在你的项目中创建一个本地 Expo 模块:
2
在模块的 podspec 文件中将 ExpoUI 添加为依赖项:
创建 SwiftUI 视图
3
将你的 SwiftUI 视图分为两部分创建:
- Props class:继承
ExpoUI中的UIBaseViewProps,以自动支持modifiers属性 - View struct:遵循
ExpoSwiftUI.View协议,该协议要求包含一个@ObservedObject类型的props属性和一个body
4
在模块中使用 ExpoUIView 注册该视图。这会为你的 SwiftUI 视图包装修饰符支持,并使其可供 JavaScript 使用:
5
创建一个包装组件,用于连接修饰符与事件处理。createViewModifierEventListener 工具可使 onTapGesture 和 onAppear 之类的基于事件的修饰符与你的自定义视图配合工作:
6
从模块的入口点导出该组件:
使用自定义组件
向本地模块添加原生源文件并不会将其添加到 iOS 项目中。重新构建前请运行
npx expo prebuild。否则,构建会因cannot find 'MyCustomView' in scope而失败。
你的自定义组件现在可以与所有 ExpoUI 内置修饰符配合使用:
创建自定义修饰符
你还可以创建可与任何 Expo UI 组件配合使用的自定义修饰符。
修饰符是 SwiftUI 用来配置视图样式、布局、行为等内容的方式。更多信息请参阅 Apple 的 ViewModifier 文档。
原生修饰符实现
1
创建一个符合 ViewModifier 和 Record 的修饰符结构体:
这会添加第二个原生源文件,因此重新构建前请再次运行
npx expo prebuild。
2
在模块定义中使用 ViewModifierRegistry 注册你的修饰符。使用 OnCreate 进行注册、OnDestroy 进行注销,以避免与 SwiftUI 渲染线程发生竞态条件:
JavaScript 修饰符函数
3
创建一个生成修饰符配置的 TypeScript 函数:
4
从你的模块中导出该修饰符:
使用自定义修饰符
你的自定义修饰符可与任何 ExpoUI 组件一起使用:
后续步骤
你的自定义组件现在可以与内置修饰符系统配合使用。接下来你可以:
- 使用 Expo UI 附带的内置 SwiftUI 组件
- 针对特定于应用的样式模式构建自定义修饰符
- 封装第三方 SwiftUI 库,以便在 React Native 中使用
- 将你的组件打包为 npm 包,与他人分享