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类型对应的位数