Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_16800119
unidocs-zh
提交
d01b1f5a
unidocs-zh
项目概览
qq_16800119
/
unidocs-zh
与 Fork 源项目一致
Fork自
DCloud / unidocs-zh
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d01b1f5a
编写于
8月 02, 2023
作者:
DCloud_Heavensoft
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update data-type.md
上级
1759f381
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
37 addition
and
37 deletion
+37
-37
docs/uts/data-type.md
docs/uts/data-type.md
+37
-37
未找到文件。
docs/uts/data-type.md
浏览文件 @
d01b1f5a
...
...
@@ -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端的实现,方便开发者写全端兼容代码。
N
umber是一个泛数字类型,包括整数或浮点数,包括正数负数。例如: 正整数
`42`
或者 浮点数
`3.14159`
或者 负数
`-1`
。
n
umber是一个泛数字类型,包括整数或浮点数,包括正数负数。例如: 正整数
`42`
或者 浮点数
`3.14159`
或者 负数
`-1`
。
```
ts
// 以下都是number类型
...
...
@@ -25,7 +25,7 @@ let c = 42
let
d
=
3.14159
```
注意:
在UTS中,Number 是基本数据类型,是默认数字类型,开发者书写的字面量如果没有特别指定类型也自动识别为N
umber。
注意:
UTS中 number 是默认数字类型,书写的字面量如果没有特别指定类型会自动识别为 n
umber。
除了 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 会产生类型不一致的错误。
举个例子:
```
u
ts
```
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对象再进行其他处理和操作
这种情况下,我们建议的做法是将其先转换为UTS
的
Array对象再进行其他处理和操作
```
u
ts
```
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录