Écrit et lit des données dans la liste des propriétés (fichier .plist) en utilisant un modèle conforme à «PropertyListEncoder (Decoder)» et «Codable».
Swift: 5.0
Créez un modèle des données que vous souhaitez enregistrer dans la liste des propriétés sous une forme conforme à «Codable».
Cette fois, à titre d'exemple, utilisons Book
, qui a un titre et un nom d'auteur comme éléments, comme modèle.
Book.swift
struct Book: Codable {
var title: String
var writerName: String
}
Les opérations sur les fichiers sont effectuées à l'aide de FileManager
.
Vous pouvez écrire dans la liste des propriétés en codant le modèle préparé précédemment en utilisant PropertyListEncoder
.
BookManager.swift
class BookManager {
//Chemin URL de la liste des propriétés à gérer
static private var plistURL: URL {
let documents = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
return documents.appendingPathComponent("book.plist")
}
static func write(book: Book) {
let encoder = PropertyListEncoder()
//Encodez les données que vous souhaitez enregistrer
guard let data = try? encoder.encode(book) else { return }
//Remplacez si la liste des propriétés existe déjà. Sinon, créez-en un nouveau
if FileManager.default.fileExists(atPath: plistURL.path) {
try? data.write(to: plistURL)
} else {
FileManager.default.createFile(atPath: plistURL.path, contents: data, attributes: nil)
}
}
}
Comme pour l'écriture de données, les opérations sur les fichiers sont effectuées à l'aide de FileManager
.
Les données lues dans la liste des propriétés sont décodées dans le modèle Book
en utilisant PropertyListDecoder
.
BookManager.swift
class BookManager {
//réduction//
static func load() -> Book {
let decoder = PropertyListDecoder()
//Lire les données de la liste des propriétés de destination et les décoder
guard let data = try? Data.init(contentsOf: plistURL),
let book = try? decoder.decode(Book.self, from: data) else {
return Book(title: "", writerName: "")
}
return book
}
}
En utilisant Codable
et PropertyListEncoder (Decoder)
, nous avons pu facilement implémenter des opérations de données sur Property List (.plist).
Recommended Posts