方法的快速抽象返回类型



我想创建一个函数,从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]()
}

最新更新