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 创建自定义 SwiftUI 组件和修饰符,并将其集成到 Expo UI 中。
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 类:扩展
ExpoUI中的UIBaseViewProps,以自动支持modifiers属性 - 视图结构体:遵循
ExpoSwiftUI.View协议,该协议要求包含一个@ObservedObject的props属性和一个body
4
使用 ExpoUIView 在模块中注册视图。它会为 SwiftUI 视图封装修饰符支持,并使其可供 JavaScript 使用:
5
创建一个将修饰符与事件处理连接起来的包装组件。createViewModifierEventListener 实用工具可让 onTapGesture 和 onAppear 等基于事件的修饰符与自定义视图配合使用:
6
从模块的入口点导出组件:
使用自定义组件
向本地模块添加原生源文件,并不会将它添加到 iOS 项目中。重新构建前请运行
npx expo prebuild。否则,构建会失败,并提示cannot find 'MyCustomView' in scope。
现在,你的自定义组件可以使用所有内置的 Expo UI 修饰符:
创建自定义修饰符
你也可以创建适用于任意 Expo UI 组件的自定义修饰符。
修饰符是 SwiftUI 用于配置视图样式、布局、行为等的方式。更多信息请参阅 Apple 的 ViewModifier 文档。
原生修饰符实现
1
创建一个遵循 ViewModifier 和 Record 的修饰符结构体:
这会添加第二个原生源文件,因此重新构建前请再次运行
npx expo prebuild。
2
在模块定义中使用 ViewModifierRegistry 注册修饰符。为避免与 SwiftUI 渲染线程发生竞态条件,请在 OnCreate 中调用 register,并在 OnDestroy 中调用 unregister:
JavaScript 修饰符函数
3
创建一个用于生成修饰符配置的 TypeScript 函数:
4
从模块中导出修饰符:
使用自定义修饰符
你的自定义修饰符适用于任意 Expo UI 组件:
后续步骤
现在,你的自定义组件可以使用内置的修饰符系统。接下来,你可以:
- 使用 Expo UI 附带的内置 SwiftUI 组件
- 为特定应用的样式模式构建自定义修饰符
- 封装第三方 SwiftUI 库,以供 React Native 使用
- 将组件发布为 npm 包,供他人使用