0Pricing
Swift Academy · 课时

读取与写入数据

将数据和字符串持久化到磁盘。

读取与写入数据 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. URL 与文件路径
  2. 读取与写入数据
  3. 管理目录
  4. 应用沙盒目录
← 返回 Swift Academy