Apple 让iOS 应用程序内的文件编写、阅读和编辑变得非常容易。每个应用程序都有一个sandbox directory(称为文档目录),你可以在那里存储你的文件。 FileManager 物件用非常简单的API提供这些功能。
文件可以存储在你的应用程序的Document目录的目录和子目录中。这就是为什麽Apple 推荐使用URL 来指定和处理使用FileManager 物件。
URL类,一般来说,在与网路合作时使用,如API请求和打开网站。这种用例需要为每个要创建的URL添加https:// 前缀。对於文件,Apple 要求使用 "file://"前缀,这使得Apple 能够检测你是否使用了正确的文件URL。
func makeURL(forFileNamed fileName: String) -> URL?
:
该方法负责创建具有给定名称的文件的 URL。 如前所述,我们只能使用 .userDomainMask 写入文档目录。
fileManager.fileExists(atPath: url.absoluteString)
:
如果文件已经存在,则返回 true。 我们可能不希望覆盖该文件,但这取决於您的用例。
范例:
class FilesManager {
enum Error: Swift.Error {
case fileAlreadyExists
case invalidDirectory
case writtingFailed
}
let fileManager: FileManager
init(fileManager: FileManager = .default) {
self.fileManager = fileManager
}
func save(fileNamed: String, data: Data) throws {
guard let url = makeURL(forFileNamed: fileNamed) else {
throw Error.invalidDirectory
}
if fileManager.fileExists(atPath: url.absoluteString) {
throw Error.fileAlreadyExists
}
do {
try data.write(to: url)
} catch {
debugPrint(error)
throw Error.writtingFailed
}
}
private func makeURL(forFileNamed fileName: String) -> URL? {
guard let url = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first else {
return nil
}
return url.appendingPathComponent(fileName)
}
}
现在我们确定可以保存文件,我们应该使用 Data 对象方法 write(to url: URL, options: Data.WritingOptions) throws
将文件存储在指定的 URL 下。
func read(fileNamed: String) throws -> Data {
guard let url = makeURL(forFileNamed: fileNamed) else {
throw Error.invalidDirectory
}
guard fileManager.fileExists(atPath: url.absoluteString) else {
throw Error.fileNotExists
}
do {
return try Data(contentsOf: url)
} catch {
debugPrint(error)
throw Error.readingFailed
}
}
文件系统非常适合存储我们从 Web 下载的图像,并希望方便地减少加载时间。 在这种情况下,我们可以使用 Library/Caches 文件夹。
我们可以在 Library 文件夹中创建一个文件来存储我们的应用程序的状态
SQLite 是一个包含在 C 编程库中的关系数据库管理系统。 与许多其他数据库管理系统相比,SQLite 不是客户端-服务器数据库引擎。 事实上,它嵌入在客户端应用程序本身中。 所以 SQLite 不涉及网络。
在应用程序中使用 SQLite 的最常见目的是可以在数据库级别进行一些数据读/写优化,这是使用 CoreData 无法完成的。 这个话题非常广泛,所以建议您熟悉以下 SQLite wrapper:https://github.com/groue/GRDB.swift。
<<: Day27 Plugin 从零开始到上架 - iOS instagram APIs
>>: [Day 30] Reactive Programming - 感想
今天呢,来讲讲其他有关字串的用法~ 若是我们今天想知道这个字串的第几个字是什麽 那摸 我们就可以使用...
现在有一些还不错的网站有在蒐集各校段考考古题 例如:全国中小学题库网、昌爸工作坊 等等 由於我国着作...
前言 前篇讲解如何产二维条码 QR Code,这篇则是示范如何解析(解码) QR Code,类似工具...
假日发一波真的是令人感动 其实我在看这课程的时候都放两倍速听 刚好友人来玩经过我位置居然跟我说在听什...
对於其他人没什麽用的我的 git cheatsheet。 感觉还是要有情境呢.. git log ...