简体中文
需HBuilderX 3.8.0 及以上版本
uts中经常要调用iOS和Android的api。uni对常用api进行了封装。在uni的api覆盖范围内,开发者可以简单的只调用uni的api实现对iOS、Android的能力调用。
目前uts插件代码中可以直接调用部分uni api,如uni.request
、uni.showModel
。未来会陆续实现所有uni api在uts中的完整调用。
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中,由于不支持联合类型,complete回调函数的参数会当做any类型处理。
any类型对象不能直接使用“.”访问其属性,目前暂时可以使用JSON.stringify()转换为字符串处理,或者在success和fail回调中分别处理成功和失败的数据。
此问题仅在complete回调函数中存在,success和fail回调函数中可以使用“.”访问参数的属性。
如下示例:
export 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
目前仅支持以上列出的部分uni api的调用,uni ext api实现的api(如uni.getBatteryInfo)暂时还不支持在uts插件中调用
uni-app x 项目中使用的 uts插件 在 app 平台存在以下差异:
Android平台
uvue 页面 和 uts插件 都编译原生 kotlin 代码,因此 uts插件 可以调用所有的 uni API,不受限制。
iOS平台 uvue 页面 编译为 js 代码运行在 jscore 环境中,所有 uni API 都被封装为 js 层接口。uts插件则编译为原生 swfit 代码,在 swift 代码中无法直接调用 js 层接口,因此 uts插件 不能调用所有 uni API。 上一章节中列出的 uni API 实现时做了特殊处理,额外封装了对应的 swfit 层接口,支持在uts插件中调用。