Userdefaults中的Firebase ID

时间:2018-12-04 04:24:10

标签: swift firebase firebase-realtime-database

我无法以userdefaults读写Firebase节点ID

let userRef = recordRef.child("users")

let userRecord = userRef.childByAutoId()
let newUserId = userRecord.key
let newUserDict = ["id": newUserId , "username": "admin" , "password": password , "userType": "power" , "active": "yes"]
let newUser = Users(dictionary: newUserDict as [String: Any])
userRecord.setValue(newUser.toDictionary())

let userdefault = UserDefaults.standard //adding login details in defaults for auto login
userdefault.set(id!, forKey: "schoolId")
userdefault.set(code, forKey: "schoolCode")
userdefault.set("admin", forKey: "username")
userdefault.set(password, forKey: "password")
userdefault.set("power", forKey: "userType")
userdefault.set(newUserId!, forKey: "userId")

现在,当我尝试读取schoolId或newUserID时,出现NIL值错误

print(userDefaults.string(forKey: "userID")!)
print(userDefaults.string(forKey: "userType")!)

有什么想法如何在用户默认值下读写节点ID?

1 个答案:

答案 0 :(得分:0)

添加/检索对象时,应使用相同的键。您在保存userId并检索userID时使用了不同的密钥,因此由于userId!= userID,您将获得nil的密钥。

一个更好的解决方案是为以下UserDefaults键创建一个枚举,

enum UserDefaultKey: String {
    case schoolId
    case schoolCode
    case username
}

使用枚举项类型将UserDefaults扩展为setget

extension UserDefaults {

    public func set<T>(_ value: T?, forKey: UserDefaultKey) {
        self.set(value, forKey: forKey.rawValue)
    }

    public func value<T>(ofType: T.Type, for key: UserDefaultKey) -> T? {
        return self.value(forKey: key.rawValue) as? T
    }
}

然后您可以按以下方式使用这些键,

let userdefault = UserDefaults.standard
userdefault.set("YYYYY", forKey: .schoolId)
userdefault.set("Kam", forKey: .username)

print(userdefault.value(ofType: String.self, for: .schoolId)!)
print(userdefault.value(ofType: String.self, for: .username)!)