无法将类型为“[Favorite.Type]”的 return 表达式转换为类型为“[Favorite]”的 return
Cannot convert return expression of type '[Favorite.Type]' to return type '[Favorite]'
我想创建一个通用函数,用于从符合 NSObject 和 NSCoding 协议的 UserDefaults 中获取元素。但是当我想使用那个函数时,我得到了这个错误
func getFavorites() -> [Favorite] {
return get(type: Favorite, forKey: UD_FAVORITES)
}
Cannot convert return expression of type '[Favorite.Type]' to return type '[Favorite]'
这是我的 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,编译器可以推断出类型(由return类型指定[Favorite]
)
func get<T>(valueForKey key: String) -> [T] {
和
return get(valueForKey: UD_FAVORITES)
还有
if let data = self.data(forKey: key) {
我想创建一个通用函数,用于从符合 NSObject 和 NSCoding 协议的 UserDefaults 中获取元素。但是当我想使用那个函数时,我得到了这个错误
func getFavorites() -> [Favorite] {
return get(type: Favorite, forKey: UD_FAVORITES)
}
Cannot convert return expression of type '[Favorite.Type]' to return type '[Favorite]'
这是我的 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,编译器可以推断出类型(由return类型指定[Favorite]
)
func get<T>(valueForKey key: String) -> [T] {
和
return get(valueForKey: UD_FAVORITES)
还有
if let data = self.data(forKey: key) {