Невозможно установить / получить массив сопоставленных объектов для userDefaults в Swift - PullRequest
0 голосов
/ 12 ноября 2018

Я искал переполнение стека, и ни один ответ не мог найти то, что мне нужно, чтобы решить эту проблему.

Я анализирую массив и извлекаю данные, но я застрял, пытаясь установить / получить его, потому что мне нужно установить его в NSArray или что-то еще, прежде чем устанавливать его в userDefaults

Вот мой установщик / получатель:

import Foundation

private extension UserDefaultsKey {
    static var galleryKey: Key<GalleryImage> {
        return "images"
    }
}

class GalleryCache: GalleryCacheType {

    private let userDefault: UserDefaultsServiceType

        var imageUrl: [GalleryImage]? {
        get {
            if let userDefaultValue = self.userDefault.value(forKey: .galleryKey) {
                return userDefaultValue
            }
            return nil
        }
        set {
            if let newValue = newValue {
                let urlData = NSKeyedArchiver.archivedData(withRootObject: newValue)
                userDefault.set(value: urlData, forKey: .galleryKey)
            }
        }
    }

    init() {
        let customUserDefault = UserDefaults(suiteName: "pictures")
        self.userDefault = UserDefaultsService(customUserDefault: customUserDefault)
    }
}

My GalleryCacheType и UserDefaultServiceType, которые являются протоколами:

protocol GalleryCacheType {

    var imageUrl: [GalleryImage]? { get set }

}

Класс, реализующий UserDefaultProtocols:

import Foundation

final class UserDefaultsService: UserDefaultsServiceType {

    private var customUserDefault: UserDefaults?

    init(customUserDefault: UserDefaults?) {
        self.customUserDefault = customUserDefault
    }

    private var defaults: UserDefaults {
        if let custom = self.customUserDefault {
            return custom
        }
        return UserDefaults.standard
    }

    func value<T>(forKey key: UserDefaultsKey<T>) -> T? {
        return self.defaults.value(forKey: key.key) as? T
    }

    func set<T>(value: T?, forKey key: UserDefaultsKey<T>) {
        self.defaults.set(value, forKey: key.key)
    }
}

А сама ГалереяИзображение:

import ObjectMapper

struct GalleryImage: Mappable {

    var url: String!

    init?(map: Map) { }

    mutating func mapping(map: Map) {
        url        <- map["file_path"]
    }
}

Ошибки, которые Xcode показывает мне, следующие:

1 Ответ

0 голосов
/ 15 января 2019

Как утверждает @rmdaddy, хранить данные в UserDefaults нехорошо, поэтому вместо сохранения их в UserDefaults храните их в соответствующей песочнице (мне особенно нравится Realm).

...