从Swift 3中的字节数组中读取值

时间:2017-09-03 09:33:10

标签: ios arrays iphone swift xcode

我对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'

任何帮助表示感谢。

1 个答案:

答案 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支持的平台,现在都是小端)。对于可移植性而言,这可能不是一个好的假设。