大佬教程收集整理的这篇文章主要介绍了ios – 在Swift 3中提取Data对象的片段,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
let myDataStream = Data(bytes: [24,163,209,194,255,1,184,230,37,208,140,201,6,64,7,98,108,117,...])
字节#1(索引0)表示第一个对象的长度,因此在这种情况下,第一个对象由前24个对象组成,包括字节#1
我尝试了很多方法,但我一直无法弄清楚
>如何将前24个字节提取到新的Data对象中
>#1完成后,如何从myDataStream中删除前24个字节.字节#25将再次具有下一个对象的大小
我最接近解决#1的是
let streamLength = Int(myDataStream[0]) let newStream = Data(bytes: myDataStream[0...streamLength])
subData(in :)是Data结构上的实例方法.
removeSubRange()也是Data结构上的实例方法.
您可以在此处阅读有关这些方法的更多信息:https://developer.apple.com/reference/foundation/data
示例方法:
func extract(from data: inout Data) -> Data? { guard data.count > 0 else { return nil } // Define the length of data to return let length = Int.init(data[0]) // Create a range based on the length of data to return let range = Range(0..<length) // Get a new copy of data let subData = data.subdata(in: rangE) // Mutate data data.removeSubrange(rangE) // Return the new copy of data return subData }
用法:
// Data (27 bytes) var data = Data(bytes: [24,42,63,78,200,3,34,36]) // First extraction let first = extract(from: &data) print(first!) // Prints 24 bytes print(data) // Prints 3 bytes // Second extraction let second = extract(from: &data) print(second!) // Prints 3 bytes print(data) // Prints 0 bytes // Third extraction let third = extract(from: &data) print(third ?? "No Data") // Prints "No Data"
进行扩展
extension Data { mutaTing func extract() -> Data? { guard self.count > 0 else { return nil } // Define the length of data to return let length = Int.init(self[0]) // Create a range based on the length of data to return let range = Range(0..<length) // Get a new copy of data let subData = self.subdata(in: rangE) // Mutate data self.removeSubrange(rangE) // Return the new copy of data return subData } }
然后你可以使用这样的方法:
// Data (27 bytes) var data = Data(bytes: [24,36]) // First extraction let first = data.extract() print(first!) // Prints 24 bytes print(data) // Prints 3 bytes // Second extraction let second = data.extract() print(second!) // Prints 3 bytes print(data) // Prints 0 bytes // Third extraction let third = data.extract() print(third ?? "No Data") // Prints "No Data"
以上是大佬教程为你收集整理的ios – 在Swift 3中提取Data对象的片段全部内容,希望文章能够帮你解决ios – 在Swift 3中提取Data对象的片段所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。