我想从符合NSObject和Nscoding协议的UserDefaults获取元素来制作一般功能。但是当我想使用该功能时,我会得到此错误
func getFavorites() -> [Favorite] {
return get(type: Favorite, forKey: UD_FAVORITES)
}
在
那是我的UserDefaults扩展名:
func get<T>(type: T, forKey key: String) -> [T] {
if let data = self.object(forKey: key) as? Data {
do {
let tData = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as! [T]
return tData
} catch {
debugPrint(error)
return [T]()
}
} else {
print("EMPTY (key)")
return [T]()
}
}
type
的类型必须为 T.Type
func get<T>(type: T.Type, forKey key: String) -> [T] { ...
,您必须称其为
return get(type: Favorite.self, forKey: UD_FAVORITES)
实际上您不需要参数,这是Swift,编译器可以推断类型(由返回类型[Favorite]
指定)
func get<T>(valueForKey key: String) -> [T] {
和
return get(valueForKey: UD_FAVORITES)
有
if let data = self.data(forKey: key) {