提交 d01b1f5a 编写于 作者: DCloud_Heavensoft's avatar DCloud_Heavensoft

Update data-type.md

上级 1759f381
......@@ -2,7 +2,7 @@
### 布尔值(Boolean)
布尔是简单的基础类型,只有2个值分别是:`true``false`
布尔是简单的基础类型,只有2个值分别是:`true``false`在全平台没有差异。
```ts
let a:boolean = true
......@@ -11,11 +11,11 @@ let b = false
### 数字(Number)
在web中,数字不区分整型和浮点。但在kotlin和swift中,数字需要是一个确定类型,比如Int、Float,没有泛数字。
在web中,数字不区分整型和浮点。但在kotlin和swift中,数字需要是一个确定类型,比如Int、Float、Double,没有泛数字。
UTS 在iOS和Android平台上新增了 number,拉齐了web端的实现,方便开发者写全端兼容代码。
UTS 在iOS和Android平台上新增了 number 类型,拉齐了web端的实现,方便开发者写全端兼容代码。
Number是一个泛数字类型,包括整数或浮点数,包括正数负数。例如: 正整数 `42` 或者 浮点数 `3.14159` 或者 负数 `-1`
number是一个泛数字类型,包括整数或浮点数,包括正数负数。例如: 正整数 `42` 或者 浮点数 `3.14159` 或者 负数 `-1`
```ts
// 以下都是number类型
......@@ -25,7 +25,7 @@ let c = 42
let d = 3.14159
```
注意:在UTS中,Number 是基本数据类型,是默认数字类型,开发者书写的字面量如果没有特别指定类型也自动识别为Number。
注意:UTS中 number 是默认数字类型,书写的字面量如果没有特别指定类型会自动识别为 number。
除了 number,UTS 在Android和iOS设备上,也可以使用kotlin和swift的专用数字类型:
......@@ -48,8 +48,8 @@ let d = 3.14159
大多数场景下,开发者使用 字面量(即Number类型)就可以满足需要,但是也有需要特有数字类型的场景。
1. 在 kotlin 和 swift 中,有些系统API或三方SDK的传入和返回强制约定了这些平台特有数字类型,此时无法使用number。
2. number作为泛数字,性能还是弱于Int。在普通计算中无法体现出差异,但在千万次运算后,累计会产生毫秒级速度差异。
1. 在 kotlin 和 swift 中,有些系统API或三方SDK的入参或返回值的类型,强制约定了平台特有数字类型,此时无法使用number。
2. number 作为泛数字,性能还是弱于Int。在普通计算中无法体现出差异,但在千万次运算后,累计会产生毫秒级速度差异。
当需要特有数字类型时,UTS中可以直接定义<!--,也可以通过number类型转换为特有数字类型。-->
......@@ -65,9 +65,10 @@ let b:Int = 4
let c:Double = a * 1.0 / b
```
* 注意这些特有数字类型不能在web端和小程序端使用,如工程需兼容非App端,要把这些代码放入条件编译;
* iOS和Android都有的类型,比如Int,编译后可跨2个平台;但如果使用了某平台专有的数字类型,比如swift的Int8,则此代码不能编译到Android,工程如需支持Android,则把这些代码写在条件编译
* 注意这些特有数字类型不能在web端和小程序端使用,如工程需兼容非App端,要把这些代码放入条件编译
* iOS和Android都有的类型,比如Int,编译后可跨2个平台;但如果使用了某平台专有的数字类型,比如swift的Int8,则此代码不能编译到Android,工程如需支持Android,则把这些代码写在条件编译
这些特有类型定义后,可以使用kotlin和swift为其提供的各种方法,具体参考kotlin和swift的文档。
- 在 kotlin(app-android) 下转换特定的平台数字类型
```ts
......@@ -132,24 +133,25 @@ let user: string | null
Array,即数组,支持在单个变量名下存储多个元素,并具有执行常见数组操作的成员。
js的array是可变长的泛型array。
js和swift的array,是可变长的泛型array。
在kotlin中,array是不可变长的,length是固定的。只有arrayList是可变长的。
而在kotlin中,其自带的array是不可变长的,length是固定的。只有arrayList是可变长的。
<!-- 补充swift说明 -->
为了拉齐实现,UTS补充了新的Array,替代kotlin的array。它继承自kotlin的ArrayList,所以可以变长。
为了拉齐实现,UTS补充了UTSArray,它继承自ArrayList,所以可以变长。
但为了接近web的写法,方便跨端,UTSArray在new的时候仍使用了`new Array`
如果开发者需要使用原始的kotlin的不可变长的array,需使用 kotlin.array。
需要使用 kotlin.array 的场景和特有数字类型一样:
1. 某些系统API或三方原生SDK的入参或返回值强制指定了kotlin的array。
2. uts新增的可动态变长的array,在性能上不如固定length、不可变长的原始kotlin.array。但也只有在巨大量的运算中才能体现出毫秒级的差异。
#### 创建一个数组对象
`UTS`中数组的创建有两种方式:
1 字面量创建
1. 字面量创建
```
```ts
let a = [1,2,3];//支持
let a = [1,'2',3];//支持
......@@ -157,8 +159,8 @@ let a = [1,'2',3];//支持
let a = [1,,2,3];//不支持
```
2 创建数组对象
```
2. 创建数组对象
```ts
let a = new Array(1,2,3);//支持
let a = new Array(1,'2',3);//支持
let a = Array(1,2,3);//支持
......@@ -169,24 +171,26 @@ let a = Array(1,'2','3');//支持
在UTS语言中,推荐使用foreach来实现数组的遍历
```
```ts
const array1: string[] = ['a', 'b', 'c'];
array1.forEach((element:string, index:number) => {
console.log(array1[index])
});
```
#### 更多API
#### kotlin 平台的Array 特性
更多Array的API,[详见](https://uniapp.dcloud.net.cn/uts/buildin-object-api/array.html)
在kotlin平台上,Array 的具体实现类为: `io.dcloud.uts.UTSArray`
#### kotlin平台的 Array 特性
UTSArray 拉齐了Web平台 Array的功能和定义,可以满足大多数场景需要 ,但是在涉及与 系统API/三方sdk 交互部分,因为 系统API/三方sdk 是基于 java/kotlin 开发 因此可能会产生类型不一致的错误。
<!-- 在kotlin平台上,Array 的具体实现类为: `io.dcloud.uts.UTSArray` -->
UTS 的 Array 拉齐了各个平台 Array 的功能和定义,可以满足大多数场景需要,但是在涉及与 系统API/三方sdk 交互部分,因为 系统API/三方sdk 是基于 java/kotlin 开发,因此调用时直接使用 UTS 的 Array 会产生类型不一致的错误。
举个例子:
```uts
```ts
let packageManager = UTSAndroid.getUniActivity()!.getPackageManager();
let intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
......@@ -194,23 +198,20 @@ intent.addCategory(Intent.CATEGORY_LAUNCHER);
let resolveInfo = packageManager.queryIntentActivities(intent,0);
```
上面的代码向 系统查询了有多少应用可以响应 `launcher`行为 ,返回的 resolveInfo 是一个 `List<ResolveInfo>`
上面的代码向系统查询了有多少应用可以响应 `launcher`行为 ,返回的 resolveInfo 是一个 `List<ResolveInfo>`
这种情况下,我们建议的做法是将其先转换为UTSArray对象再进行其他处理和操作
这种情况下,我们建议的做法是将其先转换为UTSArray对象再进行其他处理和操作
```uts
```ts
let launcherList = UTSArray.fromNative(resolveInfo)
console.log(clothing.length);
```
下面汇总了常用的转换场景和代码:
##### 1 我有一个UTSArray 需要转换为其他类型
```
```ts
let utsArr= ["hello","world"]
// UTSArray 转换 kotlin.collections.List
......@@ -221,24 +222,21 @@ let kotlinArray = utsArr.toTypedArray()
```
##### 2 我有一个原生类数组类型 需要转成成UTS的Array
##### 2 我有一个原生类数组类型 需要转成一个UTSArray
```
```ts
// kotlin.collections.List 转换 UTSArray
let utsArr= mutableListOf("hello","world")
let kotlinList = UTSArray.fromNative(utsArr)
```
```
```ts
// kotlin.Array 转换 UTSArray
let utsArr= arrayOf("hello","world")
let kotlinList = UTSArray.fromNative(utsArr)
```
### Object类型 @object
对象(object)是指内存中的可以被标识符引用的一块区域,是一种引用类型。包括Array,Date,Map,Set,JSON等。
......@@ -263,7 +261,9 @@ list[1] = 100;
### null类型 @null
uts 的类型系统可以消除来自代码空引用的危险。
许多编程语言中最常见的陷阱之一,就是访问空引用的成员会导致空引用异常。在 Java 中,这等同于 NullPointerException 或简称 NPE。
在 uts 中,类型系统能够区分一个引用可以容纳 null (可空引用)还是不能容纳(非空引用)。 例如,String 类型的常规变量不能容纳 null:
```ts
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册