Swift 多个开关变量用int类型与后端交互

2025-02-24  本文已影响0人  流星阁

假设有这样一个场景,如果你有一个包含多个开关变量(例如 60 个布尔值)的 JSON 数据,并且想将它们简化成一个 Int 类型进行传输,可以通过使用 位运算 来实现。这种方式利用了整数的每一位来表示一个开关状态,这样就可以在一个 Int 中存储多个布尔值。
1.每个布尔值对应一个位:你可以用一个 Int 类型来存储所有布尔值的状态。假设你有 60 个布尔值,那么你可以使用一个 64 位整数(Int64)来存储它们(即每一位表示一个布尔值)。
2.使用位运算来设置和读取布尔值:
使用 按位与(&) 操作读取某一位的状态。
使用 按位或(|) 操作设置某一位的状态。

代码示例:

// Int 32位  Int64 64位  Int128
// 将布尔值数组转换为 Int:
func encodeSwitchesToInt(switches: [Bool]) -> Int64 {
    var result: Int64 = 0
    for (index, switchState) in switches.enumerated() {
        if switchState {
            result |= (1 << index)  // 设置对应的位为 1
        }
    }
    return result
}

// 从 Int 中解码出布尔值:
func decodeIntToSwitches(value: Int64, count: Int) -> [Bool] {
    var switches: [Bool] = []
    for i in 0..<count {
        let switchState = (value & (1 << i)) != 0
        switches.append(switchState)
    }
    return switches
}

let switches = [true, false, true, true, false, false, true, true, false, false] // 10个开关
let encoded = encodeSwitchesToInt(switches: switches)
print("Encoded int: \(encoded)")

let decodedSwitches = decodeIntToSwitches(value: encoded, count: switches.count)
print("Decoded switches: \(decodedSwitches)")

编码时要确保每个开关的顺序固定,否则解码时可能出现错乱,以及int类型对应的位数

上一篇 下一篇

猜你喜欢

热点阅读