📅  最后修改于: 2023-12-03 15:15:52.268000             🧑  作者: Mango
在 iOS 开发中,本地存储和 iCloud 存储是常见的存储方式。本地存储是指将数据保存在设备本地,而 iCloud 存储则可以在不同设备之间共享数据。本文将会介绍在 Swift 中如何使用本地存储和 iCloud 存储。
本地存储是将数据保存在设备本地的方式,常用的本地存储方式有以下几种:
UserDefaults
是一种简单的键值对存储方式,比如可以用来保存用户偏好设置、游戏数据等。使用 UserDefaults
储存数据的步骤如下:
UserDefaults
实例let userDefaults = UserDefaults.standard
userDefaults.set("Hello, World!", forKey: "key")
let value = userDefaults.string(forKey: "key")
print(value)
Plist 是一种便于储存结构化数据的文件格式,常用于储存应用程序设置、用户数据等。使用 Plist 储存数据的步骤如下:
guard let plistPath = Bundle.main.path(forResource: "filename", ofType: "plist") else {
return
}
let dict = NSDictionary(contentsOfFile: plistPath)
dict?.write(toFile: plistPath, atomically: true)
CoreData 是一种高级的本地数据库存储方式,它可以存储结构化的数据,并支持查询、排序、筛选等复杂操作。使用 CoreData 存储数据的步骤如下:
创建 CoreData model
创建 CoreData Stack
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "MyApp")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
let context = persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "Person", in: context)!
let person = NSManagedObject(entity: entity, insertInto: context)
person.setValue("Alice", forKeyPath: "name")
do {
try context.save()
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Person")
do {
let result = try context.fetch(request)
for data in result as! [NSManagedObject] {
let name = data.value(forKey: "name") as! String
}
} catch {
print("Failed")
}
iCloud 存储是将数据保存在 iCloud 上的一种存储方式。使用 iCloud 储存数据需要先创建开发者账号,并在 App ID 上启用 iCloud。iCloud 存储的数据可以在不同设备之间共享。使用 iCloud 存储数据的步骤如下:
创建 iCloud container
获取 iCloud container URL
let fileManager = FileManager.default
guard let iCloudContainerURL = fileManager.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents") else {
return
}
let filePath = iCloudContainerURL.appendingPathComponent("filename.txt")
try? "Hello, iCloud!".write(to: filePath, atomically: true, encoding: .utf8)
let content = try? String(contentsOf: filePath, encoding: .utf8)
print(content)
本文介绍了在 Swift 中如何使用本地存储和 iCloud 存储。对于小量的结构化数据,可以使用 UserDefaults
或 Plist 存储;而对于大量的结构化数据,可以使用 CoreData 存储;如果需要在多个设备之间共享数据,可以使用 iCloud 存储。