无法 set/get 映射对象数组到 Swift 上的 userDefaults
Cannot set/get an array of mapped objects to userDefaults on Swift
我一直在搜索 Stack Overflow,但没有找到解决此问题所需的答案。
我正在解析一个数组,并检索数据,但我一直在尝试 set/get 它,因为我需要先将它设置为 NSArray 或其他东西,然后再将其设置为我的 userDefaults
这是我的 setter/getter:
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)
}
}
我的 GalleryCacheType 和 UserDefaultServiceType,它们是协议:
protocol GalleryCacheType {
var imageUrl: [GalleryImage]? { get set }
}
class 实现 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)
}
}
以及 GalleryImage 本身:
import ObjectMapper
struct GalleryImage: Mappable {
var url: String!
init?(map: Map) { }
mutating func mapping(map: Map) {
url <- map["file_path"]
}
}
The errors Xcode is showing me are the following
如@rmdaddy 所述,将数据存储在 UserDefaults 上并不好,因此,与其将其保存到 UserDefaults,将其存储在适当的沙箱中(我特别像境界)。
我一直在搜索 Stack Overflow,但没有找到解决此问题所需的答案。
我正在解析一个数组,并检索数据,但我一直在尝试 set/get 它,因为我需要先将它设置为 NSArray 或其他东西,然后再将其设置为我的 userDefaults
这是我的 setter/getter:
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)
}
}
我的 GalleryCacheType 和 UserDefaultServiceType,它们是协议:
protocol GalleryCacheType {
var imageUrl: [GalleryImage]? { get set }
}
class 实现 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)
}
}
以及 GalleryImage 本身:
import ObjectMapper
struct GalleryImage: Mappable {
var url: String!
init?(map: Map) { }
mutating func mapping(map: Map) {
url <- map["file_path"]
}
}
The errors Xcode is showing me are the following
如@rmdaddy 所述,将数据存储在 UserDefaults 上并不好,因此,与其将其保存到 UserDefaults,将其存储在适当的沙箱中(我特别像境界)。