Data 是 Swift 标准库中的一个结构体,设计用于处理和存储任意二进制数据。它在很多情况下非常有用,例如网络数据传输、文件操作、编码/解码等。
核心特点
1、二进制数据容器:
Data 是一种轻量级、动态大小的二进制数据容器。
2、高效:
适合处理任意长度的二进制数据,提供了良好的性能和灵活性。
3、安全性:
提供了类型安全的接口,防止内存溢出等问题。
4、兼容性强:
Data 可以与许多系统 API(例如文件系统、网络请求等)很好地配合使用。
创建 Data 的方法
1、使用字节数组初始化
let byteArray: [UInt8] = [0x41, 0x42, 0x43]
let data = Data(byteArray)
print(data) // 输出:3 bytes
2、从字符串创建
通过 UTF-8 或其他编码将字符串转换为 Data:
let string = "Hello"
let data = Data(string.utf8)
print(data) // 输出:5 bytes
3、从文件加载
let fileURL = URL(fileURLWithPath: "/path/to/file")
if let fileData = try? Data(contentsOf: fileURL) {
print(fileData)
}
4、空数据或固定大小数据
let emptyData = Data()
print(emptyData.isEmpty) // true
let fixedData = Data(repeating: 0, count: 10) // 创建10字节,值全为0
print(fixedData.count) // 10
操作 Data
1、检查属性
字节数:
let data = Data([0x01, 0x02, 0x03])
print(data.count) // 3
是否为空:
let data = Data()
print(data.isEmpty) // true
2、访问字节
使用索引:
let data = Data([0x41, 0x42, 0x43])
print(data[0]) // 65 (ASCII: 'A')
遍历:
for byte in data {
print(byte)
}
3、追加数据
var data = Data([0x41, 0x42])
data.append(0x43)
print(data) // [65, 66, 67]
4、转换回其他格式
转换为字节数组:
let data = Data([0x01, 0x02, 0x03])
let byteArray = [UInt8](data)
print(byteArray) // [1, 2, 3]
转换为字符串:
let data = Data("Hello".utf8)
if let string = String(data: data, encoding: .utf8) {
print(string) // "Hello"
}
常见用途
1、文件读写
写入文件:
let data = Data("Hello, file!".utf8)
let fileURL = URL.documentsDirectory.appending(path: "example.txt")
try? data.write(to: fileURL)
从文件读取:
let fileURL = URL.documentsDirectory.appending(path: "example.txt")
if let fileData = try? Data(contentsOf: fileURL) {
print(fileData)
}
2、网络请求
数据是网络传输的核心格式,例如发送和接收 JSON:
发送数据:
let json = Data("""
{"key": "value"}
""".utf8)
var request = URLRequest(url: URL(string: "https://example.com")!)
request.httpMethod = "POST"
request.httpBody = json
接收数据:
URLSession.shared.dataTask(with: URL(string: "https://example.com")!) { data, response, error in
if let data = data {
print(data)
}
}.resume()
3、图片处理
import UIKit
if let image = UIImage(named: "example"),
let imageData = image.jpegData(compressionQuality: 0.8) {
print(imageData) // 图片的二进制数据
}
重要 API 一览
初始化
init(): 创建空数据。
init(repeating: UInt8, count: Int): 创建重复字节的数据。
init<S>(S) where S : Sequence, S.Element == UInt8: 通过字节序列初始化。
读写
write(to: URL, options: Data.WritingOptions): 写入文件。
init(contentsOf: URL, options: Data.ReadingOptions): 从文件加载。
操作
append(_:): 追加数据。
subdata(in:): 获取数据片段。
base64EncodedString(): 转换为 Base64 字符串。
总结
Data 是处理二进制数据的核心工具,灵活且功能丰富。它在文件操作、网络通信、数据存储和媒体处理等方面发挥了重要作用。在日常开发中,熟练使用 Data 能有效提高编码效率和代码质量。