首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将“[Favorite.Type]”类型的返回表达式转换为返回类型“[收藏]”

无法将“[Favorite.Type]”类型的返回表达式转换为返回类型“[收藏]”
EN

Stack Overflow用户
提问于 2019-03-06 22:14:17
回答 1查看 410关注 0票数 0

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

代码语言:javascript
复制
    func getFavorites() -> [Favorite] {
        return get(type: Favorite, forKey: UD_FAVORITES)
    }

无法将“Favorite.Type”类型的返回表达式转换为返回类型“收藏”

这是我的UserDefaults扩展:

代码语言:javascript
复制
    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]()
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-06 22:22:49

type的类型必须是T.Type

代码语言:javascript
复制
func get<T>(type: T.Type, forKey key: String) -> [T] { ...

你得叫它

代码语言:javascript
复制
return get(type: Favorite.self, forKey: UD_FAVORITES)

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

代码语言:javascript
复制
func get<T>(valueForKey key: String) -> [T] {

代码语言:javascript
复制
return get(valueForKey: UD_FAVORITES)

而且有

代码语言:javascript
复制
if let data = self.data(forKey: key) {
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55033030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档