This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
This is documentation for the next SDK version. For up-to-date documentation, see the latest version (SDK 57).
使用 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属性 - View 结构体:遵循
ExpoSwiftUI.View协议,该协议要求提供一个@ObservedObjectprops属性和一个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 软件包分享给其他人使用