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

标签 swift nsuserdefaults swift4.2

我想创建一个通用函数,用于从符合 NSObject 和 NSCoding 协议(protocol)的 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,编译器可以推断类型(由返回类型指定[Favorite])

func get<T>(valueForKey key: String) -> [T] {

return get(valueForKey: UD_FAVORITES)

还有

if let data = self.data(forKey: key) {

关于swift - 无法将类型 '[Favorite.Type]' 的返回表达式转换为返回类型 '[Favorite]',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55033030/

相关文章:

swift - 从单例中获取可选字符串

json - 提交查询以获取带有更新日期字符串的 Json 数据

ios - 在 iOS 9 中未调用 UITableViewCell 中的 IBAction

ios - UIView 的框架被随机覆盖

ios - touchesBegan 多次调用

facebook-graph-api - 使用 Swift 在 iOS SDK 中处理 Facebook Graph API 结果

ios - View Controller 之间的变量和数据传输

ios - NSUserDefaults 返回 nil

ios - 如何使用 Swift 从 tableview 和 sqlite3 中删除

swift - 是否可以将 Swift 4.1 添加到 Xcode 10