0Pricing
Swift Academy · 课时

应用沙盒目录

使用 Documents、Caches 和临时位置。

应用沙盒目录 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。

应用沙盒目录

应用运行在沙盒中:只能在自己的容器内写入数据。系统为文稿、缓存和临时文件提供了标准文件夹。

查找文稿目录

FileManager.urls(for:in:) 会返回已知目录对应的 URL。.documentDirectory 用于存放应备份的用户数据。

import Foundation

let fm = FileManager.default
let docs = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
print("Documents path ends correctly: \(docs.lastPathComponent)")

构建文件 URL

将文件名追加到目录 URL 后,即可得到存放自有文件的完整路径。

import Foundation

let fm = FileManager.default
let docs = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
let file = docs.appendingPathComponent("profile.json")
print(file.lastPathComponent)

缓存目录

.cachesDirectory 用于存放可以重新生成的数据。系统可能会在磁盘空间紧张时清理这些数据,因此绝不要在此处保存无法替代的数据。

import Foundation

let fm = FileManager.default
let caches = fm.urls(for: .cachesDirectory, in: .userDomainMask).first!
print("Caches dir name: \(caches.lastPathComponent)")

临时目录

FileManager.default.temporaryDirectory 会提供用于存放短期文件的临时工作空间,您应自行清理这些文件。

import Foundation

let tmp = FileManager.default.temporaryDirectory
let scratch = tmp.appendingPathComponent("work.tmp")
print("Temp file path ready: \(scratch.lastPathComponent)")

文稿、缓存与临时目录

使用文稿存放用户创建的数据(会备份),使用缓存存放可重新生成的数据,并使用 tmp 存放可随时丢弃的文件。

import Foundation

// Choose the right folder for the data's lifetime.
print("Documents = backed up, Caches = purgeable, tmp = transient")

应用支持目录

.applicationSupportDirectory 用于存放由应用管理、但不直接面向用户的数据,例如数据库。您通常会在首次启动时创建它。

import Foundation

let fm = FileManager.default
let support = fm.urls(for: .applicationSupportDirectory, in: .userDomainMask).first!
try? fm.createDirectory(at: support, withIntermediateDirectories: true)
print("Ensured Application Support exists")

保存到文稿目录

将目录 URL 与 write 调用结合起来,即可将用户数据持久化到沙盒内。

import Foundation

let fm = FileManager.default
let docs = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
let url = docs.appendingPathComponent("note.txt")
try? "hello".write(to: url, atomically: true, encoding: .utf8)
print("Saved into Documents")

读回数据

读取沙盒文件的方式与读取任何文件 URL 相同,因为该路径在容器内完全有效。

import Foundation

let fm = FileManager.default
let docs = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
let url = docs.appendingPathComponent("note.txt")
if let text = try? String(contentsOf: url, encoding: .utf8) {
    print(text)
}

排除备份

为大型、可重新生成的文件设置 isExcludedFromBackup 资源值,使其不会让 iCloud 备份变得过大。

import Foundation

var url = URL(fileURLWithPath: "/tmp/big.cache")
var values = URLResourceValues()
values.isExcludedFromBackup = true
try? url.setResourceValues(values)
print("Marked excluded from backup")

沙盒为何重要

沙盒路径会因安装过程和设备而异,因此绝不要将其硬编码。请始终在运行时使用 FileManager 解析目录。

import Foundation

// Never hardcode /var/mobile/... — resolve at runtime instead.
let fm = FileManager.default
let docs = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
print("Resolved Documents dynamically: \(!docs.path.isEmpty)")

快速检查

应将必须备份的用户数据存放在哪个目录中?

回顾

应用会将文件存储在通过 FileManager.urls(for:in:) 解析出的沙盒文件夹中:文稿用于存放需要备份的用户数据,缓存用于存放可重新生成的数据,tmp用于存放临时文件,此外还有应用支持目录。请在运行时解析路径,绝不要将其硬编码。文件输入输出课程到此结束。

常见问题解答

「应用沙盒目录」课时是免费的吗?

是的 — 「应用沙盒目录」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。

「应用沙盒目录」这节课中我会学到什么?

使用 Documents、Caches 和临时位置。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Swift Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「应用沙盒目录」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Swift Academy 课中编写并运行代码吗?

能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

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