我想创建一个从UserDefauts返回值的函数,如下所示:
func GetBool(name: String) -> Bool {
let defaults = UserDefaults.standard
return defaults.bool(forKey: name)
}
func GetBoolArray(name: String) -> [Bool] {
let defaults = UserDefaults.standard
return defaults.array(forKey: name) as? [Bool] ?? [Bool]()
}
但我不想为Bool创建一个函数,另一个函数用于Int,另一个用于CGFloat等。
将所有函数(对于Bool,Int等)抽象为一个(一个用于单个值,另一个用于数组值)的最佳方法是什么?
答案 0 :(得分:1)
这样的事情对你有用吗?
func GetValue(name: String) -> Any? {
let defaults = UserDefaults.standard
return defaults.value(forKey: name)
}
func GetValueArray(name: String) -> [Any] {
let defaults = UserDefaults.standard
return defaults.array(forKey: name) ?? [Any]()
}
请注意,第一个函数在使用时需要解包,因为您使用的键可能与值不匹配。 另外,我认为关键的数组仅适用于NSArrays,因此第一个函数可能适用于这两种情况。
答案 1 :(得分:0)
感谢@Martin R,我发现了快速的仿制药,这就是我要找的东西
func GetValue<T>(name: String) -> T {
let defaults = UserDefaults.standard
return defaults.value(forKey: name) as! T
}
func GetArray<T>(name: String) -> [T] {
let defaults = UserDefaults.standard
return defaults.array(forKey: name) as? [T] ?? [T]()
}