如何在集合方法 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)
}
}
我正在尝试从字典中为此数据管理器 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)
}
}