ios - 在 macOS 上解码后,在 iOS 上编码为 Data 的 Int 数为零
问题描述
我有这个Int
号码,我必须通过网络传输。
我正在使用这个类扩展。
extension Data {
init<T>(from value: T) {
self = Swift.withUnsafeBytes(of: value) { Data($0) }
}
func to<T>(type: T.Type) -> T? where T: ExpressibleByIntegerLiteral {
var value: T = 0
guard count >= MemoryLayout.size(ofValue: value) else { return nil }
_ = Swift.withUnsafeMutableBytes(of: &value, { copyBytes(to: $0)} )
return value
}
}
我在 iOS 设备上使用它进行编码和发送:
let number = button.number
let buttonNumberData = Data(from:number)
do {
try session.send(buttonNumberData, toPeers: session.connectedPeers, with: .reliable)
} catch let error as NSError {
}
}
如果我po buttonNumberData
此时做 a ,我会得到:
▿ 4 bytes
- count : 4
▿ pointer : 0x002e9940
- pointerValue : 3053888
▿ bytes : 4 elements
- 0 : 1
- 1 : 0
- 2 : 0
- 3 : 0
如果我使用这个解码数据,
let buttonNumber = buttonNumberData.to(type: Int.self)
我有一个有效的号码。
然后,它Data
被传输并到达 macOS 计算机,并使用相同的命令进行解码:
let buttonNumber = buttonNumberData.to(type: Int.self)
问题是 buttonNumber 总是nil
,但如果我po buttonNumberData
此时执行 a ,我有这个:
▿ 4 bytes
- count : 4
▿ pointer : 0x00007ffeefbfd428
- pointerValue : 140732920747048
▿ bytes : 4 elements
- 0 : 1
- 1 : 0
- 2 : 0
- 3 : 0
似乎是有效的数据。
Data
与 macOS 工作方式相关的扩展类出现了一些问题。
有任何想法吗?
解决方案
推荐阅读
- python - 使用 Boto 创建 IAM 策略时出现 MalformedPolicyDocumentException
- c# - Azure Spatial Anchor - 如何获取足够的环境数据?
- java - 将 Spring boot 版本从 2.1.6 迁移到 Spring boot 2.4 时出现以下错误
- 64-bit - 大小大于 64 位寄存器的数字的乘法
- ruby-on-rails - 安全持久化用户数据以减少 API 调用的最佳实践
- reactjs - 如何在 React Native 中提供对应用程序的离线访问?
- c++ - 函数调用期间的类型转换问题
- html - 适合 HTML 表格中的内容和自动宽度
- python - django自动完成灯无法输入字符串
- plsqldeveloper - 如何恢复 PLSQL Developer 窗口?