Невозможно преобразовать возвращаемое выражение типа «[Favorite.Type]» в возвращаемый тип «[Favorite]». - PullRequest
0 голосов
/ 07 марта 2019

Я хочу сделать общую функцию для получения Элементов из UserDefaults, которые соответствуют NSObject и NSCoding Protocol.Но когда я хочу использовать эту функцию, я получаю эту ошибку

    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]()
        }
    }

1 Ответ

1 голос
/ 07 марта 2019

Тип 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) {
...