# UTS中使用uni api

需HBuilderX 3.8.0 及以上版本

uts中经常要调用iOS和Android的api。uni对常用api进行了封装。在uni的api覆盖范围内,开发者可以简单的只调用uni的api实现对iOS、Android的能力调用。

目前uts插件代码中可以直接调用部分uni api,如uni.requestuni.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);
		}
	});
}

# 注意事项

# 异步API中complete回调函数中的参数是any类型

在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‌

# 支持的API列表

# 网络

# 数据缓存

# 设备

# 界面

目前仅支持以上列出的部分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插件中调用。