swift入門から放棄へ-情報格納(3)

2495 ワード

  • Nice個人情報記憶参照コードは、まず、UserDefaultsに記憶すべき個人情報列挙変数を拡張する、この列挙は、記憶の重要な部分であるカスタムプロトコルに従うことに注意する.
  • extension UserDefaults {
    
        enum user: String,UserDefaultsProtocol {
            case name
            case age
            case nick
            case mobile
            case id
        }
    }
    

    プロトコルでは、変数uniqueKeyを定義、格納する値に一意のkeyを設定し、格納および値の取得方法を提供する.
    public protocol UserDefaultsProtocol {
        
        var uniqueKey: String{get}
    }
    
    extension UserDefaultsProtocol where Self:RawRepresentable,Self.RawValue == String{
        
        ///Any 
        func store(value: Any?) {
            UserDefaults.standard.setValue(value, forKey: uniqueKey)
        }
        var value: Any? {
            return UserDefaults.standard.value(forKey: uniqueKey)
        }
        var stringValue: String? {
            return value as? String
        }
        
        ///URL 
        func store(url: URL?) {
            UserDefaults.standard.set(url, forKey: uniqueKey)
        }
        var urlValue: URL? {
            return UserDefaults.standard.url(forKey: uniqueKey)
        }
        
        ///BOOL 
        func store(value: Bool) {
            UserDefaults.standard.set(value, forKey: uniqueKey)
        }
        var boolValue: Bool {
            return UserDefaults.standard.bool(forKey: uniqueKey)
        }
        
        // key
        var uniqueKey: String {
            return"\(Self.self).\(rawValue)"
        }
        //Delete
        func remove() {
            UserDefaults.standard.removeObject(forKey: uniqueKey)
        }
    }
    
    

    user管理クラスにおいてプロトコルで提供する方法によりアクセスが容易になり、開発がより容易になる.
    class JINUser: NSObject {
        static let instance = JINUser()
        private override init() {
            Name = UserDefaults.user.name.stringValue ?? ""
            Age = UserDefaults.user.age.stringValue ?? ""
            Nick = UserDefaults.user.nick.stringValue ?? ""
            Id = UserDefaults.user.id.stringValue ?? ""
            Mobile = UserDefaults.user.mobile.stringValue ?? ""
        }
    
        var Name: String?{
            didSet{
                UserDefaults.user.name.store(value: Name)
            }
        }
        
        var Age: String?{
            didSet{
                UserDefaults.user.age.store(value: Age)
            }
        }
        
        var Nick: String?{
            didSet{
                UserDefaults.user.nick.store(value: Nick)
            }
        }
        
        var Id: String?{
            didSet{
                UserDefaults.user.id.store(value: Id)
            }
        }
        
        var Mobile: String?{
            didSet{
                UserDefaults.user.mobile.store(value: Mobile)
            }
        }
      
    }