2017-07-26 3 views
1

J'essaie de faire un ensemble et d'obtenir la méthode à cette classe de gestionnaire de données, à partir d'un dictionnaire et je ne sais pas comment insérer les valeurs du dictionnaire 'dans la méthode set et get (je l'ai changé d'un tableau à CIVD) grâceComment présenter un dictionnaire dans une méthode set swift?

class DataManager { 

    private static var sharedInstance: DataManager? 
    private var recordsArray: [[String:String]] = [] 

    private let defaults = UserDefaults.standard 

    let userRecord: String = "userRecord"; 

    private init(){} 

    public static func getInstance()-> DataManager{ 
     if DataManager.sharedInstance == nil { 
      DataManager.sharedInstance = DataManager() 
     } 
     return DataManager.sharedInstance! 
    } 


    //here is my problem - set and get methods 
    //I don't know how to move the parameters 

    public func setRecordsArray([_:String,path:String]) { 
     self.recordsArray.append(?); 
     defaults.set(self.recordsArray, forKey: self.userRecord) 
    } 
    // again the same problem 

    public func getRecordsArray() -> [String] { 
     let a = self.defaults.array(forKey: self.userRecord); 
     return a as! [String];  
    } 
} 
+0

Voulez-vous dire comment accéder [_: String, path: String] du corps de votre fonction ? –

+0

oui @davidPasztor – Moran

Répondre

0

la clé pour répondre à votre question est de savoir le type de variable que vous souhaitez définir et obtenir. Dans ce cas

, la variable recordsArray est un tableau de dictionnaires de valeurs et des clés chaîne: [[string: String]]

Ainsi, une façon de passer ce paramètre est de créer une variable du même type comme il doit être réglé:

public func setRecordsArray(array:[[String:String]]) { 
     self.recordsArray = array 
     defaults.set(self.recordsArray, forKey: self.userRecord) 
    } 

il met à jour simplement la valeur de la variable self.recordsArray et définit la valeur par défaut dans l'utilisateur.

La méthode get fonctionne de manière similaire, mais elle renvoie une variable du même type qui doit être retournée.

Un ? a été ajouté au retour parce que s'il n'y a pas defalts utilisateur enregistré, la méthode renvoie nil:

public func getRecordsArray() -> [[String:String]]?{ 
     if let array = defaults.object(forKey: self.userRecord) as? [[String:String]]{ 
      self.recordsArray = array 
      return array 
     } 
     return nil 
    } 

, vous pouvez également faire une méthode de jeu pour les éléments d'insertion à l'intérieur du tableau. dans ce cas, le type de paramètre doit être comme [chaîne: String], le type d'élément de ce tableau:

public func setRecord(record:[String:String]) { 
     if let array = defaults.object(forKey: self.userRecord) as? [[String:String]]{ 
      self.recordsArray = array 
      self.recordsArray.append(record) 
      defaults.set(self.recordsArray, forKey: self.userRecord) 
     } else{ 
      self.recordsArray.append(record) 
      defaults.set(self.recordsArray, forKey: self.userRecord) 
     } 
    } 
+0

Merci beaucoup, c'est la réponse! – Moran