我想创建一个函数,从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 创建一个函数,等等。
将所有函数(对于布尔值、Int 等(抽象为一个函数(一个用于单个值,另一个用于数组值(的最佳方法是什么?
这样
的东西对你有用吗?
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,因此第一个函数可能对这两种情况都有效。
感谢 @Martin R,我发现了 swift 泛型,这就是我一直在寻找
的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]()
}