Swift抽象返​​回类型的方法

时间:2017-04-10 18:35:56

标签: swift

我想创建一个从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等)抽象为一个(一个用于单个值,另一个用于数组值)的最佳方法是什么?

2 个答案:

答案 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]()
}