2017-10-03 2 views
1

Salut tout le monde là-bas quelqu'un sait comment enregistrer des données dans swift 4 J'ai fait une application emoji que je peux décrire les emojis et j'ai un avenir que je peux enregistrer le nouvel emoji dans l'application j'ai écrit ce code dans ma classe emoji mais comme je veux retourner l'emoji je reçois une erreur s'il vous plaît aidez-moi.comment enregistrer des données dans swift 4 avec codable et gestionnaire de fichiers

import Foundation 

struct Emoji : Codable { 
    var symbol : String 
    var name : String 
    var description : String 
    var usage : String 
    static let documentsdirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! 
    static let archiveurl = documentsdirectory.appendingPathComponent("emojis").appendingPathExtension("plist") 

    static func SaveToFile (emojis: [Emoji]) { 
     let propetyencod = PropertyListEncoder() 
     let encodemoj = try? propetyencod.encode(emojis) 
     try? encodemoj?.write(to : archiveurl , options : .noFileProtection) 
    } 
    static func loadeFromFile() -> [Emoji] { 
    let propetydicod = PropertyListDecoder() 
     if let retrivdate = try? Data(contentsOf: archiveurl), 
     let decodemoj = try? 
      propetydicod.decode(Array<Emoji>.self, from: retrivdate){ 

     } 
     return decodemoj  in this line i get error 
    } 

} 

Répondre

0

L'erreur se produit car decodemoj est hors de la portée. Vous devez écrire

static func loadeFromFile() -> [Emoji] { 
    let propetydicod = PropertyListDecoder() 
    if let retrivdate = try? Data(contentsOf: archiveurl), 
     let decodemoj = try? propetydicod.decode(Array<Emoji>.self, from: retrivdate) { 
     return decodemoj 
    } 
    return [Emoji]() 
} 

et renvoyer un tableau vide en cas d'erreur. Vous pouvez également déclarer la valeur de retour en tant que tableau facultatif et renvoyer nil.


Mais pourquoi pas un bloc do - catch?

static func loadeFromFile() -> [Emoji] { 
    let propetydicod = PropertyListDecoder() 
    do { 
     let retrivdate = try Data(contentsOf: archiveurl) 
     return try propetydicod.decode([Emoji].self, from: retrivdate) 
    } catch { 
    print(error) 
    return [Emoji]() 
    } 
} 
+0

vous avez oublié de mentionner 'statique laisser archiveurl = documentsdirectory.appendingPathComponent ("emojis"). AppendingPathExtension ("plist")' ne devrait même pas compiler. 'documentsdirectory' est une propriété statique donc il doit utiliser' Emoji.documentsdirectory' –

+0

aussi 'return []' est suffisant. Swift est un langage de type déduit. –

+1

merci beaucoup monsieur, je ne sais pas, je suis nouveau dans la programmation et rapide, j'essaie d'apprendre de Apple livre le développement de l'application avec swift et l'exemple est comme ça – user8058965