代码之家  ›  专栏  ›  技术社区  ›  Moran

如何用集合方法swift表示词典?

  •  1
  • Moran  · 技术社区  · 7 年前

    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];    
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Sore    7 年前

    回答问题的关键是了解要设置和获取的变量类型。

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

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

    它只是更新了自我的价值。recordsArray变量并在用户默认值中设置值。

    get方法的工作原理类似,但它返回的变量类型与应返回的类型相同。

    A. ? 在返回中添加,因为如果没有保存的用户定义,则该方法返回nil:

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

    此外,您可以创建一个用于在数组中插入元素的集合方法。 在这种情况下,参数类型必须类似于[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)
            }
        }