提交 cf0701c5 编写于 作者: D DCloud_LXH

fix: issue #1674

上级 2333f33c
......@@ -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等三方库标签。这个问题后续会被处理
......@@ -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升级到大于或者等于打包机的版本,后续我们会优化提示。
......@@ -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.
先完成此消息的编辑!
想要评论请 注册