1***@qq.com
1***@qq.com
  • 发布:2026-01-04 17:24
  • 更新:2026-01-04 17:24
  • 阅读:46

@UTSJS.keepAlive 如何作用于UTS和Swift桥接接口实现中

分类:uni-app x

@UTSJS.keepAlive
class WebViewOptionsAdapter implements IOSVoiceWebViewOptions {
// 参数
private options : VoiceOptions | null = null

// 构造  
constructor(options : VoiceOptions | null) {  
    this.options = options  
}  

// 首次进入语音  
get firstStartVoice() : boolean {  
    return this.options?.firstStartVoice ?? false  
}  

// 语音模式切换回调  
onVoiceModeChange(status : boolean) : void {  
    if (this.options != null) {  
        this.options.onVoiceModeChange(status)  
    }  
}  

// 语音页面加载状态回调  
// Swift 协议要求 Int 类型,但 UTS 接口需要 number 类型,需要转换  
@UTSJS.keepAlive  
onLoadStatus(mode : Int) : void {  
    if (this.options != null) {  
        console.log('加载模式', mode)  
        this.options.onLoadStatus(mode as number)  
    }  
}  

// 模型切换回调  
onChangeModelCallback(status : boolean) : void {  
    if (this.options != null) {  
        this.options.onChangeModelCallback(status)  
    }  
}  

// 对话重置回调  
onResetChatCallback(status : boolean) : void {  
    if (this.options != null) {  
        this.options.onResetChatCallback(status)  
    }  
}  

}

2026-01-04 17:24 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

该问题请在专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

@UTSJS.keepAlive 装饰器在 UTS 与 Swift 桥接接口中的作用是确保回调函数持续有效,避免内存回收导致回调失效。

在您提供的代码中,onLoadStatus 方法被标记为 @UTSJS.keepAlive,这是因为该方法作为 Swift 协议 IOSVoiceWebViewOptions 的实现,需要被 Swift 层多次调用(如页面加载状态变化时)。根据 UTS插件文档

  1. 默认行为变更:HBuilderX 4.25+ 版本中,UTS 导出的方法回调默认只触发一次后自动回收,防止内存泄漏
  2. 持续回调需求:当需要方法能被多次调用(如事件监听场景),必须使用 @UTSJS.keepAlive 标记
  3. 桥接场景应用:在 Swift 调用 UTS 实现的协议方法时,该装饰器确保 Objective-C/Swift 层能持续访问到 UTS 方法实现

特别注意:

  • 该装饰器会使回调函数常驻内存,需避免在高频触发场景滥用
  • 必须同时在 iOS/Android 平台配置(若多端实现)
  • 不适用于 export const 方式导出的函数,需用 export function/class 语法

您的使用场景正确:通过此装饰器确保 Swift 层能持续调用 onLoadStatus 回调方法,实现语音 WebView 加载状态的实时同步。建议参考UTS插件开发文档进行其他桥接方法的适配。

内容为 AI 生成,仅供参考

要回复问题请先登录注册