É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