Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 无法转换类型为';[Favorite.Type]';返回类型';[最爱]';_Swift_Nsuserdefaults_Swift4.2 - Fatal编程技术网

Swift 无法转换类型为';[Favorite.Type]';返回类型';[最爱]';

Swift 无法转换类型为';[Favorite.Type]';返回类型';[最爱]';,swift,nsuserdefaults,swift4.2,Swift,Nsuserdefaults,Swift4.2,我想创建一个通用函数,用于从符合NSObject和NSCoding协议的UserDefaults中获取元素。但是当我想使用这个函数时,我得到了这个错误 func getFavorites() -> [Favorite] { return get(type: Favorite, forKey: UD_FAVORITES) } 无法将“[Favorite.type]”类型的返回表达式转换为返回类型“[Favorite]” 这是我的UserDefaults扩展:

我想创建一个通用函数,用于从符合NSObject和NSCoding协议的UserDefaults中获取元素。但是当我想使用这个函数时,我得到了这个错误

    func getFavorites() -> [Favorite] {
        return get(type: Favorite, forKey: UD_FAVORITES)
    }
无法将“[Favorite.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]()
        }
    }
func-get(type:T,forKey:String)->[T]{
如果让data=self.object(forKey:key)作为数据{
做{
让tData=try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data)as![T]
返回数据
}抓住{
调试打印(错误)
返回[T]()
}
}否则{
打印(“空\(键)”)
返回[T]()
}
}

类型
type
的类型必须是
T.type

func get<T>(type: T.Type, forKey key: String) -> [T] { ...

实际上,您不需要参数,这是Swift,编译器可以推断类型(由返回类型
[Favorite]
指定)


还有

if let data = self.data(forKey: key) {
谢谢:)我以前不知道。
func get<T>(valueForKey key: String) -> [T] {
return get(valueForKey: UD_FAVORITES)
if let data = self.data(forKey: key) {