uni-app uts里64位整型提升没有swift类型

发布于 1周前 作者 yuanlaile 来自 Uni-App

uni-app uts里64位整型提升没有swift类型

声明一个64位整型,可以用安卓对应Long,但用不了文档上写的Swift Int64,怎么弄?

信息类型 信息内容
开发环境
版本号
项目创建方式
1 回复

uni-app 开发中,可能会遇到需要与原生代码进行交互的场景,尤其是当需要处理64位整型数据时。由于 uni-app 主要是基于 Vue.js 开发框架,而原生平台(如 iOS 和 Android)则使用各自的原生开发语言(如 Swift 和 Java/Kotlin),因此处理64位整型数据时,可能会遇到类型不匹配的问题。

在 iOS 原生开发中,Swift 使用 Int64 类型来表示64位整型数据。然而,在 uni-app 与原生交互时,我们通常需要将这些数据封装在 JSON 对象中,并通过特定的接口进行传递。由于 JSON 标准本身并不直接支持64位整型(通常只支持双精度浮点数或字符串),我们需要通过字符串或其他方式来进行传递。

以下是一个在 uni-app 中与 iOS 原生代码交互,传递64位整型数据的示例:

uni-app 代码(JavaScript/Vue.js)

// 假设我们需要传递一个64位整型数据给原生代码
const int64Value = BigInt("9223372036854775807"); // JavaScript 使用 BigInt 表示64位整型

// 将 BigInt 转换为字符串,以便在 JSON 中传递
const int64ValueStr = int64Value.toString();

// 调用原生接口,传递数据
uni.postMessage({
  data: {
    action: 'sendInt64Value',
    value: int64ValueStr
  }
});

iOS 原生代码(Swift)

// 假设我们有一个接收来自 uni-app 数据的接口
@objc func receiveDataFromUniApp(_ data: [String: Any]) {
    if let action = data["action"] as? String, action == "sendInt64Value",
       let value = data["value"] as? String {
        // 将字符串转换回 Int64
        if let int64Value = Int64(value) {
            // 处理 Int64 值
            print("Received Int64 value: \(int64Value)")
        } else {
            print("Failed to convert value to Int64")
        }
    }
}

// 假设这是接收数据的函数,实际使用时可能需要根据具体框架进行调整

在上面的示例中,我们在 uni-app 中使用 BigInt 来表示64位整型数据,并将其转换为字符串进行传递。在 iOS 原生代码中,我们接收这个字符串并将其转换回 Int64 类型。

这种方法虽然增加了一些额外的转换步骤,但可以有效地解决 uni-app 与原生代码之间64位整型数据类型不匹配的问题。在实际开发中,你可能还需要根据具体的业务逻辑和框架进行调整。

回到顶部