swift - Оболочка UserDefaults - PullRequest
       7

swift - Оболочка UserDefaults

0 голосов
/ 11 октября 2018

Я хочу сделать userDefaults проще в использовании .Я пишу этот код.Но я не хочу создавать перечисление allKeys (случаи voipToken, userId, userName, displayName, ...) в качестве ключевого пути для моего свойства.Если я хочу добавить переменную accessToken в структуру LoginInfo, я должен добавить case accessToken для перечисления AllKeys.Я использую CoreStore.key (.accessToken), чтобы получить keyPath для CoreStore.LoginInfo.accessToken.

import Foundation

struct CoreStore {

    //    static let sharedInstance = CoreStore()

    //    private init(){}

    private static let keyPrefix = "_shared_store_"

    enum allKeys: String {
        case accessToken
    }

    static func key(_ key: allKeys) -> String {
        return keyPrefix + key.rawValue
    }

    struct LoginInfo: CoreStoreSettable,CoreStoreGettable { }
}

extension CoreStore.LoginInfo {

    static var accessToken: String? {
        set {
            set(value: newValue, forKey: CoreStore.key(.accessToken))
        }
        get {
            return getString(forKey: CoreStore.key(.accessToken))
        }
    }
//    ...
}

protocol CoreStoreSettable {}
extension CoreStoreSettable {

    static func set(value: String?, forKey key: String) {
        UserDefaults.standard.set(value, forKey: key)
    }
}

protocol CoreStoreGettable {}
extension CoreStoreGettable {

    static func getString(forKey key: String) -> String? {
        return UserDefaults.standard.string(forKey: key)
    }
}   

Вопросы :

  1. Есть ли способ удалить"enum allKeys"?

  2. Должен ли я использовать sharedInstance ? Почему ?

Я пытался :

static var accessToken: String? {
    set {
        let keyPath = \CoreStore.Loginfo.accessToken 
        let keyPathString = keyPath.string
        set(value: newValue, forKey: keyPathString)
    }
    get {
        return getString(forKey: CoreStore.key(.accessToken))
    }
}

Я получаю ошибку "Тип выражения неоднозначен без контекста«

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...