如何在集合方法 swift 中呈现字典?

How to present a dictionary in a set method swift?

我正在尝试从字典中为此数据管理器 class 设置和获取方法,但我不知道如何在设置和获取方法中插入字典的值(我已经将它从数组更改为 Dic)谢谢

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];    
    }
}

回答你的问题的关键是知道你想要设置和获取的变量类型。

在这种情况下,recordsArray 变量是字符串值和键的字典数组:[[String:String]]

因此,传递此参数的一种方法是创建一个与应设置的类型相同的变量:

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

它只是更新 self.recordsArray 变量的值并设置用户默认值。

get 方法的工作原理类似,但是它 return 是一个具有相同类型的变量,应该 returned。

在 return 中添加了一个 ?,因为如果没有保存的用户默认值,方法 returns nil:

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

此外,您可以创建一个用于在数组中插入元素的 set 方法。 在这种情况下,参数类型必须像 [String:String],该数组的元素类型:

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)
        }
    }