我对Swift很新,我从SwiftSocket接收的字节数组中读取一些信息时遇到了一些问题
XCode说:“数据[字节]?13值”
[68,65,84,65,44,55,0,0,0,146,192,236,66]
响应应该是这样的 “DATA,”(68,65,84,65,44)然后是整数55(55,0,0,0),然后是Float(146,192,236,66)
如何在Swift3中从数组中读取这些值?
{
"id": 1,
"client": "http://loacalhost:8080/api/clients/find/1",
"startDate": 20170902,
"originTerm": 20170902,
"maxPossibleAmount": 5555.0000,
"notes": null
}
这显示了我的数组,但我似乎无法读取数值。
let (data, _, _) = client.recv(13)
dump(data)
var subAr = data?[9...12]
dump(subAr)
给我以下错误:'ArraySlice'类型的值?没有会员'withUnsafeBytes'
任何帮助表示感谢。
答案 0 :(得分:0)
.withUnsafeBytes { $0.pointee } as SomeType
是一种适用于Data
的成语。
试试这个:
//sample data...
var data: [UInt8]? = [68, 65, 84, 65, 44, 55, 0, 0, 0, 146, 192, 236, 66]
let int32Data = Data(data![5..<9])
let int32Value: Int32 = int32Data.withUnsafeBytes{$0.pointee}
print(int32Value) //->55
let floatData = Data(data![9..<13])
let floatValue: Float = floatData.withUnsafeBytes{$0.pointee}
print(floatValue) //->118.37
假设数据包含本机字节序的多字节值(对于所有Swift支持的平台,现在都是小端)。对于可移植性而言,这可能不是一个好的假设。