无法将类型 '[Favorite.Type]' 的返回表达式转换为返回类型 '[Favorite]'



我想从符合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) {

最新更新