Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-uni-app-x-zh
提交
cf0701c5
U
unidocs-uni-app-x-zh
项目概览
DCloud
/
unidocs-uni-app-x-zh
通知
144
Star
2
Fork
33
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
9
列表
看板
标记
里程碑
合并请求
11
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
unidocs-uni-app-x-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
9
Issue
9
列表
看板
标记
里程碑
合并请求
11
合并请求
11
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
cf0701c5
编写于
4月 28, 2024
作者:
D
DCloud_LXH
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: issue #1674
上级
2333f33c
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
43 addition
and
44 deletion
+43
-44
docs/plugin/uts-for-android.md
docs/plugin/uts-for-android.md
+1
-2
docs/plugin/uts-for-ios.md
docs/plugin/uts-for-ios.md
+40
-40
docs/uts/operator.md
docs/uts/operator.md
+2
-2
未找到文件。
docs/plugin/uts-for-android.md
浏览文件 @
cf0701c5
...
...
@@ -118,7 +118,7 @@ class XXX{
```
### 2.4 线程环境差异
### 2.4 线程环境差异
@thread-environment
UTS环境中,默认是没有线程概念的。
...
...
@@ -1304,4 +1304,3 @@ function getAppName(context : Context) : string {
### android原生资源文件,暂不支持三方库依赖
比如xml布局文件中暂时只支持 linearlayout等官方标签,不支持 appcompat等三方库标签。这个问题后续会被处理
docs/plugin/uts-for-ios.md
浏览文件 @
cf0701c5
...
...
@@ -32,7 +32,7 @@ UTS 插件是 uni-app 新型插件形式 [详情](/plugin/uts-plugin)
UTS 和 swift 在数据类型上基本保持了一致,但是在部分场景下,还是会有差异,在此特别说明
原则上:
原则上:
**数据类型以 UTS 内置的类型为准, 各原生平台都会对其自动适配。**
...
...
@@ -50,7 +50,7 @@ UTS 中不存在 Int、Float、Double 类型开发者在开发过程中应该使
下面以一个协议方法为例,需要实现一个三方依赖库中定义的协议方法
```
swift
// swift
// swift
// 此协议定义在其他三方 SDK 中
protocol
TestProtocol
{
func
addTwoInts
(
_
a
:
Int
,
_
b
:
Int
)
->
Int
...
...
@@ -223,17 +223,17 @@ console.log(lib.version);
-
将需要暴露的 public 文件 导入到
`TestSDK.h`
中,如
`#import <TestSDK/TestA.h>`
;
-
在
`target`
->
`Build Phases`
->
`Headers`
中将刚创建的
`TestSDK.h`
设置为
`public`
;
-
重新编译 SDK, 编译后可以看到 Modules 已经生成。
+
通过自定义 Module Map 的方式:
-
打开 XCode, 在
`TestSDK`
SDK 源码目录下创建
` module.map.modulemap `
文件;
-
在上述文件中键入下面代码中类似的内容,下述代码是以
`TestSDK`
为例,实践时需要改为自己的 SDK 和文件名;
-
在
`target`
->
`Build Settings`
->
`Module Map File`
设置
`Module Map File`
为
`$(PROJECT_DIR)/TestSDK/module.map.modulemap`
;
-
重新编译 SDK, 编译后可以看到 Modules 已经生成。
```
ts
framework
module
TestSDK
{
header
"
TestA.h
"
//需要对外暴露的头文件,需要为 plubic 的文件
header
"
TestB.h
"
//需要对外暴露的头文件,需要为 plubic 的文件
export
*
...
...
@@ -241,7 +241,7 @@ framework module TestSDK {
```
##### 无源码的情况
如果使用的是第三方非开源的 SDK, 那么可以使用下面的方式来生成 Modules:
以
`TestSDK`
为例:
...
...
@@ -250,20 +250,20 @@ framework module TestSDK {
+
在上述文件中键入下述的代码(其中的 .h 文件都要是 TestSDK.framework -> Headers 文件夹里的头文件)。
+
至此 TestSDK 就可以直接放在 uts 插件中使用了。
> 注意:
> 注意:
> 实践时要将 `TestSDK` 改成你要操作的 SDK 名称,.h 文件也要改成你要暴露的头文件名字。
```
ts
framework
module
TestSDK
{
// 下面的.h 文件都要是 TestSDK.framework -> Headers 文件夹下的头文件
header
"
AClass.h
"
header
"
AClass.h
"
header
"
BClass.h
"
header
"
CClass.h
"
header
"
DClass.h
"
export
*
}
...
...
@@ -300,26 +300,26 @@ import { UTSiOS } from "DCloudUTSFoundation"
export
function
showAlert
(
title
:
string
|
null
,
message
:
string
|
null
,
result
:
(
index
:
Number
)
=>
void
)
{
// uts方法默认会在子线程中执行,涉及 UI 操作必须在主线程中运行,通过 DispatchQueue.main.async 方法可将代码在主线程中运行
DispatchQueue
.
main
.
async
(
execute
=
():
void
=>
{
// 初始化 UIAlertController 实例对象 alert
let
alert
=
new
UIAlertController
(
title
=
title
,
message
=
message
,
preferredStyle
=
UIAlertController
.
Style
.
alert
)
// 创建 UIAlertAction 按钮
let
okAction
=
new
UIAlertAction
(
title
=
"
确认
"
,
style
=
UIAlertAction
.
Style
.
default
,
handler
=
(
action
:
UIAlertAction
):
void
=>
{
// 点击按钮的回调方法
result
(
0
)
})
// 创建 UIAlertAction 按钮
let
cancelAction
=
new
UIAlertAction
(
title
=
"
取消
"
,
style
=
UIAlertAction
.
Style
.
cancel
,
handler
=
(
action
:
UIAlertAction
):
void
=>
{
// 点击按钮的回调方法
result
(
1
)
})
// 将 UIAlertAction 添加到 alert 上
alert
.
addAction
(
okAction
)
alert
.
addAction
(
cancelAction
)
// 打开 alert 弹窗
UTSiOS
.
getCurrentViewController
().
present
(
alert
,
animated
=
true
)
})
...
...
@@ -339,9 +339,9 @@ export function showAlert(title: string|null, message: string|null, result: (ind
-
RGB 如:rgb(255, 0, 0)
-
RGBA 如:rgba(255, 0, 0, 0.5)
-
色值关键字,如: red
示例
```
ts
let
bgColor
=
UTSiOS
.
colorWithString
(
"
#000000
"
)
view
.
backgroundColor
=
bgColor
...
...
@@ -353,9 +353,9 @@ view.backgroundColor = bgColor
获取指定插件资源的运行期绝对路径
插架资源路径请传该资源在工程目录下的绝对路径
示例
```
ts
const
imagePath
=
UTSiOS
.
getResourcePath
(
"
/static/logo.png
"
)
console
.
log
(
imagePath
)
...
...
@@ -439,7 +439,7 @@ var alert = new UIAlertController()
var
alert
=
UIAlertController
(
title
:
"提示"
,
message
:
"提示内容"
,
preferredStyle
:
.
alert
);
```
```
ts
// uts 中写法
let
alert
=
new
UIAlertController
(
title
=
"
提示
"
,
message
=
"
提示内容
"
,
preferredStyle
=
UIAlertController
.
Style
.
alert
)
...
...
@@ -454,7 +454,7 @@ let alert = new UIAlertController(title="提示", message="提示内容", prefer
.
alert
```
在 uts 中需要完整的写出
在 uts 中需要完整的写出
```
ts
UIAlertController
.
Style
.
alert
...
...
@@ -495,7 +495,7 @@ swift 中定义子类继承父类时需要在子类名称后加上父类名称
```
swift
// swift
class
Son
:
Father
{
}
```
...
...
@@ -522,7 +522,7 @@ uts 中需要使用`implements`关键字代替冒号 `:`
```
ts
class
SomeClass
implements
FirstProtocol
,
AnotherProtocol
{
}
```
...
...
@@ -533,7 +533,7 @@ swift 中系统版本判断的方法
```
swift
// swift
if
#available(iOS 10.0, *)
{
}
```
...
...
@@ -552,7 +552,7 @@ swift 中闭包可以简写
```
swift
// swift 中最后一个参数如果是闭包称作为尾随闭包,可以忽略参数标签类型等简写为下面的方式
let
action
=
UIAlertAction
(
title
:
"确认"
,
style
:
.
default
)
{
action
in
}
```
...
...
@@ -626,7 +626,7 @@ map.set("name","uts")
以 hello uts 中腾讯定位为例,监听位置变化时需要实现协议方法:
`tencentLBSLocationManager(_ manager: TencentLBSLocationManager, didUpdate location: TencentLBSLocation)`
此方法第二个参数存在
`didUpdate`
参数标签
原生 swift 中的实现为
...
...
@@ -664,7 +664,7 @@ tencentLBSLocationManager(manager: TencentLBSLocationManager, @argumentLabel("di
#### 5.1.12.1 无参数标签
只写参数名称的参数,编译后会在参数前默认增加
`_`
来忽略参数标签(如上面的示例,第一个参数 manager,这种方式能兼容绝大多数方法,尤其是Swift 调用 OC 方法),但是有些参数没有参数标签,默认添加
`_`
的行为会和原生方法定义不一致,这种情况需要定义一个空的参数标签来解决
`@argumentLabel("didUpdate")`
只写参数名称的参数,编译后会在参数前默认增加
`_`
来忽略参数标签(如上面的示例,第一个参数 manager,这种方式能兼容绝大多数方法,尤其是Swift 调用 OC 方法),但是有些参数没有参数标签,默认添加
`_`
的行为会和原生方法定义不一致,这种情况需要定义一个空的参数标签来解决
`@argumentLabel("didUpdate")`
以高德定位 SDK 的代理方法为例:第三个参数 reGeocode 只有参数名称,没有参数标签
...
...
@@ -682,12 +682,12 @@ amapLocationManager(manager : AMapLocationManager, @argumentLabel("didUpdate") l
}
```
#### 5.1.13 异步方法
#### 5.1.13 异步方法
@async-method
swift 标记某个函数或者方法是异步的,你可以在它的声明中的参数列表后边加上
`async`
关键字
```
swift
// swift
// swift
@available
(
iOS
13.0
.
0
,
*
)
func
testAsync
(
_
opts
:
AsyncOptions
)
async
->
UTSJSONObject
{
if
(
opts
.
type
==
"success"
)
{
...
...
@@ -730,7 +730,7 @@ swift中try有以下三种方式:
1.
使用try (注意:要和do {} catch {} 一起使用,捕获可能的异常)
```
swift
// swift
// swift
do
{
let
dict
=
try
JSONSerialization
.
jsonObject
(
with
:
d
,
options
:
[])
print
(
dict
)
...
...
@@ -744,7 +744,7 @@ swift中try有以下三种方式:
2.
使用try? 如果能发序列化成功,就返回成功的值,不能成功就返回nil
```
swift
// swift
// swift
// 注意:dict是个可选值
let
dict
=
try
?
JSONSerialization
.
jsonObject
(
with
:
data
,
options
:
[])
...
...
@@ -753,7 +753,7 @@ swift中try有以下三种方式:
3.
使用try! 强行try,如果不能反序列化成功,会造成应用闪退, 如果能序列化成功,就返回成功的值,注意该值是个可选值。
```
swift
// swift
// swift
// 注意:dict是个可选值
let
dict
=
try!
JSONSerialization
.
jsonObject
(
with
:
data
,
options
:
[])
...
...
@@ -798,10 +798,10 @@ UTSiOS.try(JSONSerialization.jsonObject(with = data, options = []), "!" )
```
ts
// ts 中 private 修饰符不可出现在模块或命名空间元素上, 如果想将一个类 private,需要使用 @UTSiOS.keyword("private")
@
UTSiOS
.
keyword
(
"
private
"
)
@
UTSiOS
.
keyword
(
"
private
"
)
class
TestA
{
// 如果需要使用 weak 修饰属性,来避免循环引用,需要使用 @UTSiOS.keyword("weak")
@
UTSiOS
.
keyword
(
"
weak
"
)
@
UTSiOS
.
keyword
(
"
weak
"
)
private
delegate
:
TestProtocol
|
null
=
null
}
...
...
@@ -809,11 +809,11 @@ class TestA {
```
ts
@
UTSiOS
.
keyword
(
"
fileprivate
"
)
@
UTSiOS
.
keyword
(
"
fileprivate
"
)
class
TestB
{
// 一个属性可以同时有多个修饰符,前提是所写的修饰符符合Swift语法
@
UTSiOS
.
keyword
(
"
weak
"
)
@
UTSiOS
.
keyword
(
"
fileprivate
"
)
@
UTSiOS
.
keyword
(
"
weak
"
)
@
UTSiOS
.
keyword
(
"
fileprivate
"
)
delegate
:
TestProtocol
|
null
=
null
}
...
...
@@ -873,4 +873,4 @@ HBuilderX 目前写iOS uts 插件时部分语法提示会有缺失、参数类
> 特别注意
> 如果在使用真机运行编译uts插件时报 swift 版本不兼容的错误,请先检查自己的 XCode 版本,确保安装XCode 版本应大于或者等于打包机的 XCode版本;
> 如果在使用真机运行编译uts插件时报 XCode 版本应大于 13.2.1的错误,这是说明本地安装的 XCode版本过低,请忽略 13.2.1这个版本限制,直接将本地 XCode升级到大于或者等于打包机的版本,后续我们会优化提示。
\ No newline at end of file
> 如果在使用真机运行编译uts插件时报 XCode 版本应大于 13.2.1的错误,这是说明本地安装的 XCode版本过低,请忽略 13.2.1这个版本限制,直接将本地 XCode升级到大于或者等于打包机的版本,后续我们会优化提示。
docs/uts/operator.md
浏览文件 @
cf0701c5
...
...
@@ -179,7 +179,7 @@ const status = age >= 18 ? "adult" : "minor";
-
`>>=`
*
右移赋值运算符 (>>=) 将变量向右移动指定数量的位,并将结果赋值给变量。
-
`===`
*
当两边操作数指向同一个对象时,引用相等 (===) 运算符返回true。不同平台有差距,
[
见下
](
#completeComparison
)
*
当两边操作数指向同一个对象时,引用相等 (===) 运算符返回true。不同平台有差距,
[
见下
](
#completeComparison
)
-
`!==`
*
当两边操作数不指向同一个对象时,引用不等 (!==) 运算符返回true。
-
`-`
...
...
@@ -561,7 +561,7 @@ b instanceof Int //true
> 3.93+ (Android)
await 操作符用于等待一个
[
Promise
](
./buildin-object-api/promise.md
)
兑现并获取它兑现之后的值。它只能在
[
异步函数
](
./function.md#async
)
中使用。
在 HBuilderX 3.93 以下的版本或者编译为swift时,await 不能与
[
Promise
](
./buildin-object-api/promise.md
)
一同使用,此时请分别参考:
[
安卓 异步函数
](
https://uniapp.dcloud.net.cn/plugin/uts-for-android.html#_6-11-synchronized-lock-等线程同步概念-在uts里怎么写
)
、
[
iOS 异步函数
](
https://uniapp.dcloud.net.cn/plugin/uts-for-ios.html#_5-1-13-异步方法
)
。
在 HBuilderX 3.93 以下的版本或者编译为swift时,await 不能与
[
Promise
](
./buildin-object-api/promise.md
)
一同使用,此时请分别参考:
[
安卓 异步函数
](
../plugin/uts-for-android.md#thread-environment
)
、
[
iOS 异步函数
](
../plugin/uts-for-ios.md#async-method
)
。
```
ts
async
function
test
():
Promise
<
string
>
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录