读取与写入数据
将数据和字符串持久化到磁盘。
读取与写入数据 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。
读取和写入数据
Foundation 的 Data 类型用于保存原始字节,而 String 和 Data 都知道如何从文件网址读取数据以及向文件网址写入数据。
写入字符串
write(to:atomically:encoding:) 会将字符串保存到文件网址。原子写入会使用临时文件来避免数据损坏。
import Foundation
let url = URL(fileURLWithPath: "/tmp/hello.txt")
try? "Hello, file!".write(to: url, atomically: true, encoding: .utf8)
print("Wrote string to disk")读取字符串
String(contentsOf:encoding:) 会将文件加载回内存,并作为文本处理。
import Foundation
let url = URL(fileURLWithPath: "/tmp/hello.txt")
if let text = try? String(contentsOf: url, encoding: .utf8) {
print(text)
}处理数据
Data(contentsOf:) 会将任意文件读取为原始字节,适用于图像、归档文件或二进制格式。
import Foundation
let url = URL(fileURLWithPath: "/tmp/hello.txt")
if let data = try? Data(contentsOf: url) {
print("Byte count: \(data.count)")
}写入数据
data.write(to:) 会将字节持久化到文件中。结合编码功能,您可以存储文本或任何序列化负载。
import Foundation
let bytes = Data([0x48, 0x69])
let url = URL(fileURLWithPath: "/tmp/bytes.bin")
try? bytes.write(to: url)
print("Wrote raw data")将数据转换为字符串
在知道字节编码的情况下,可以使用 String(data:encoding:) 将 Data 转换为文本。
import Foundation
let data = Data([0x48, 0x69])
if let s = String(data: data, encoding: .utf8) {
print(s)
}编码 JSON
使用 JSONEncoder 将 Codable 值转换为可写入磁盘的 Data。
import Foundation
struct Note: Codable { let text: String }
let data = try? JSONEncoder().encode(Note(text: "hi"))
let url = URL(fileURLWithPath: "/tmp/note.json")
try? data?.write(to: url)
print("Saved JSON")解码 JSON
读回数据,并使用 JSONDecoder 将其解码为您的模型类型。
import Foundation
struct Note: Codable { let text: String }
let url = URL(fileURLWithPath: "/tmp/note.json")
if let data = try? Data(contentsOf: url),
let note = try? JSONDecoder().decode(Note.self, from: data) {
print(note.text)
}原子写入
atomically: true 选项会先写入临时文件,然后重命名该文件,因此读取方永远不会看到只写入了一半的文件。
import Foundation
let url = URL(fileURLWithPath: "/tmp/safe.txt")
try? "important".write(to: url, atomically: true, encoding: .utf8)
print("Atomic write done")处理错误
文件操作会抛出错误。请使用 do/catch 处理文件缺失或权限问题,而不要让程序崩溃。
import Foundation
let url = URL(fileURLWithPath: "/does/not/exist.txt")
do {
_ = try String(contentsOf: url, encoding: .utf8)
} catch {
print("Read failed: \(error.localizedDescription)")
}追加与覆盖
基本的 write(to:) 会覆盖原有内容。若要追加内容,请打开 FileHandle,先定位到文件末尾,然后再写入。
import Foundation
let url = URL(fileURLWithPath: "/tmp/log.txt")
if let handle = try? FileHandle(forWritingTo: url) {
handle.seekToEndOfFile()
handle.write(Data("line\n".utf8))
try? handle.close()
}
print("Appended")快速检查
写入时,atomically: true 能保证什么?
回顾
您已经使用 String(contentsOf:) 和 write(to:atomically:encoding:) 读写文本,使用 Data 处理原始字节,通过 JSONEncoder/Decoder 持久化模型,使用原子写入,捕获错误,并通过 FileHandle 追加内容。下一步:管理目录。
常见问题解答
「读取与写入数据」课时是免费的吗?
是的 — 「读取与写入数据」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。
「读取与写入数据」这节课中我会学到什么?
将数据和字符串持久化到磁盘。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Swift Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「读取与写入数据」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Swift Academy 课中编写并运行代码吗?
能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。