
示例工程前端移动开发跨平台【免费下载链接】uni-appA cross-platform framework using Vue.js项目地址https://gitcode.com/gh_mirrors/un/uni-app点击查看免费下载本文以官方文档《UTS中使用uni api》为核心结合本仓库uni-app 跨平台框架开源仓库中的 uts 插件示例与源码系统讲解在 uts 插件代码中调用 uni API 的用法、类型注意事项、支持范围以及 Android / iOS 平台差异。适合正在使用 HBuilderX 3.8.0 及以上版本、通过 UTS 编写原生插件并希望复用 uni 封装能力的开发者阅读。为什么要在 UTS 插件中调用 uni APIUTSuni type script是 uni-app 提供的统一强类型脚本语言可按平台编译为不同语言Web 平台编译为 JavaScript、Android 平台编译为 Kotlin、iOS 平台编译为 Swift、HarmonyOS 平台编译为 ArkTS详见 uts 插件介绍 与 uts for Android。当 UTS 开发者需要调用 iOS 和 Android 的原生能力时直接操作原生 API 往往需要处理大量平台差异。而 uni 已经对常用能力做了跨平台封装因此在uni API 的覆盖范围内开发者可以直接在 uts 插件代码中调用uni.xxx用一套代码完成对 iOS、Android 原生能力的调用无需再分别面向 Kotlin 与 Swift 编写两套实现。版本前提此能力需要HBuilderX 3.8.0 及以上版本。目前 uts 插件代码中可直接调用部分 uni API如uni.request、uni.showModal官方计划在未来陆续实现所有 uni API 在 uts 中的完整调用。快速上手在 uts 插件中弹出 Toast在 uts 插件如 uni_modules 插件内的utssdk目录下的.uts文件中直接调用uni.showToast即可与在页面脚本中调用方式完全一致export function myToast() { uni.showToast({ title: This is toast in uts with uni API!, success: function(){ console.log(uni.showToast success!); }, fail: (err) { console.log(uni.showToast success: , err); } }); }这段代码体现了 uts 中调用 uni API 的三个要点uni.showToast在 uts 插件中可直接调用无需额外 import支持success/fail回调分别处理成功与失败分支回调参数具备对应类型可用.访问属性可同时使用箭头函数与普通函数两种回调写法。在本仓库的示例工程中也能看到类似的调用实践。例如 Toast.vue 页面中先通过import { showToast } from /uni_modules/uts-toast调用 uts 插件封装的 Toast 能力当插件返回失败如未在自定义基座中运行时再回退调用uni.showToast提示用户testToastShow(){ let ret showToast(); if(!ret){ uni.showToast({ icon:none, title:需要在自定义基座中运行 }) } }这展示了一个常见模式uts 插件封装原生能力页面侧再用 uni API 做兜底交互反馈二者互补。重点注意complete 回调参数是 any 类型这是 uts 中调用异步 uni API 最容易踩的坑官方文档特别提示uts 不支持联合类型因此异步 API 中complete回调函数的参数会被当作any类型处理。其影响与对策如下complete 回调中不能使用.访问属性any类型对象无法直接点出属性目前可先用JSON.stringify()转为字符串处理或改用success/fail分别处理成功与失败数据success 与 fail 不受影响这两个回调的参数是具体类型可以正常使用.访问属性该问题仅存在于 complete 回调。正确写法示例uni.requestexport function myTest() { uni.request({ url: https://www.invalidserviceaddress.com/, success: (ret) { //ret为RequestSuccess类型可以使用.访问其属性 let data ret.data; console.log(uni.request successed: , data); }, fail: (err) { //err为RequestFail类型可以使用.访问其属性 let code err.errCode; console.log(uni.request failed: , code); }, complete: (res) { //res为any类型转换为字符串处理 let ret JSON.stringify(res); console.log(ret); } }); }错误写法示例——在 complete 回调中直接点属性uni.request({ url: https://www.invalidserviceaddress.com/, complete: (res) { console.log(res.errCode); } });编译时会报错error: Unresolved reference: errCode请务必养成习惯success/fail 中读取结构化数据complete 中只做收尾处理日志、统一清理等避免在 complete 中解析业务字段。当前支持的 uni API 清单截至本文档版本uts 插件中支持以下 uni API完整清单按能力分类网络uni.request(OBJECT)—— 发起网络请求详见 request 文档数据缓存uni.setStorage(OBJECT)—— 异步写入缓存uni.setStorageSync(KEY, DATA)—— 同步写入缓存uni.getStorage(OBJECT)—— 异步读取缓存uni.getStorageSync(KEY)—— 同步读取缓存uni.getStorageInfo(OBJECT)—— 异步获取缓存信息uni.getStorageInfoSync()—— 同步获取缓存信息uni.removeStorage(OBJECT)—— 异步移除指定缓存uni.removeStorageSync(KEY)—— 同步移除指定缓存uni.clearStorage()—— 清空缓存uni.clearStorageSync()—— 同步清空缓存以上 API 的详细参数key、data、success/fail/complete 回调等可参见 storage 文档。设备系统信息uni.getAppBaseInfo()—— 获取应用基础信息详见 getAppBaseInfo 文档uni.getDeviceInfo()—— 获取设备信息详见 getDeviceInfo 文档uni.getSystemSetting()—— 获取系统设置详见 getSystemSetting 文档界面交互反馈uni.showToast(OBJECT)/uni.hideToast()—— 显示/隐藏提示框详见 showToast 文档uni.showLoading(OBJECT)/uni.hideLoading()—— 显示/隐藏加载框详见 showLoading 文档uni.showModal(OBJECT)—— 显示模态弹窗详见 showModal 文档uni.showActionSheet(OBJECT)—— 显示操作菜单详见 showActionSheet 文档媒体HBuilderX 4.52 起新增支持uni.chooseMedia—— 拍摄或从相册中选择图片或视频详见 chooseMedia 文档使用边界目前仅支持以上列出的部分 uni API 调用。由 uni ext api 机制实现的扩展 API例如基于扩展插件实现的uni.getBatteryInfo等暂时还不支持在 uts 插件中调用。若确实需要这类能力可考虑将其封装为 uts 插件本身——本仓库 hello-uts 示例 中就提供了uts-getbatteryinfo这样的 uts 插件实现可作为替代思路的参考。平台差异为什么 iOS 与 Android 支持范围不同在uni-app x项目中使用的 uts 插件在 App 平台存在明显差异理解编译模型是正确使用的前提Android 平台可调用全部 uni APIuvue 页面和 uts 插件在 Android 平台都编译为原生 Kotlin 代码二者处于同一原生环境因此 uts 插件可以调用所有uni API不受限制。iOS 平台仅支持特殊封装过的 uni APIiOS 平台的架构不同uvue 页面编译为 JS 代码运行在 JSCore 环境中所有 uni API 都被封装为JS 层接口uts 插件则编译为原生 Swift 代码在 Swift 代码中无法直接调用 JS 层接口因此不能调用全部 uni API上文清单中列出的那些 uni API在实现时做了特殊处理额外封装了对应的 Swift 层接口从而支持在 uts 插件中调用。这就是为什么官方提供的支持清单在 iOS 上是白名单制——只有完成 Swift 层桥接的 API 才可用。可以结合 uts for iOS 中关于 uts 编译为 Swift 的描述进一步理解该约束。关于 HarmonyOS对于 HarmonyOS 平台uts 会编译为 ArkTSHBuilderX 4.22 支持且 ArkTS 与 JS 在同一环境下执行不涉及跨语言通讯问题参见 uts 插件介绍平台差异相对更小。实操建议与注意事项小结综合官方文档与本仓库示例在 uts 插件中调用 uni API 时建议遵循以下实践确认版本与平台使用 HBuilderX 3.8.0iOS 上只依赖官方支持清单内的 APIAndroid 上则无此限制区分回调职责success/fail中读取结构化字段complete中不要用.访问属性必要时用JSON.stringify输出日志优先 uni API 再退原生uni API 覆盖范围内的能力直接用 uni 封装覆盖不到如 ext api的需求再考虑用 uts 写原生实现可参考 uts-platform-api 示例 中直接操作 Android 原生 API 的写法关注版本演进支持的 API 列表会随 HBuilderX 版本持续扩充如 chooseMedia 在 HBuilderX 4.52 新增开发时留意当前版本的发布说明。在编写 uts 插件代码时也可对照 uts 语言文档、uni_modules 插件规范 与 uts 组件开发 等资料从语法与工程结构两个层面完善你的插件。赞分享示例工程前端移动开发跨平台【免费下载链接】uni-appA cross-platform framework using Vue.js项目地址https://gitcode.com/gh_mirrors/un/uni-app点击查看免费下载相关推荐uni-app/uni-app x 组件相交监听实战uni-createIntersectionObserver UTS 插件源码解析与使用指南uni app/uni app x 组件相交监听实战uni createIntersectionObserver UTS 插件源码解析与使用指南 本篇技术指南示例工程前端移动开发跨平台如何用Swindler打造自定义macOS窗口管理器5分钟快速入门指南如何用Swindler打造自定义macOS窗口管理器5分钟快速入门指南 Swindler是一款专为macOS设计的Swift窗口管理库它提供了强大的API来示例工程前端移动开发跨平台GenVideo专业指南Python视频自动化生成框架的完整解析GenVideo专业指南Python视频自动化生成框架的完整解析 GenVideo是一个基于Python开发的视频自动化生成框架专注于简化短视频内容创作流程示例工程前端移动开发跨平台创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考