1

我正在尝试将字典保存到 UserDefaults 然后我想获取数据或删除。

class userDefaultsManager {

   static func getAllUsers()->[UserModel]{

       if let all = UserDefaults.standard.array(forKey: "usersKey") as? [Dictionary<String,Any>] {
           return all.map{UserModel.init(dictionary: $0)}
       }
       return []
   }

   static func insertUser(name:String, email:String)->Bool {

        let newUserModel = UserModel.init(name: name, email: email)

        var all = getAllUser()
        all.append(newUserModel)

        UserDefaults.standard.set(all.map{$0.dictionary}, forKey: "usersKey")

        return UserDefaults.standard.synchronize()
    }

    static func deleteUser(email:String)->Bool {

        var all = getAllUser()
        let index = all.index{$0.email == email}

        if index != nil {

            all.remove(at: index!)

            UserDefaults.standard.set(all.map{$0.dictionary}, forKey: "usersKey")
            UserDefaults.standard.synchronize()

            return true

        } else {
            return false
        }
    }
}

class UserModel:NSObject{

    var name: String!
    var email: String!

    init(name:String, email:String) {

        self. name = name
        self. email = email

        super.init()
    }

    init(dictionary:[String:Any]) {

        self.name = ""
        self.email = ""

        super.init()
        self.setValuesForKeys(dictionary)
    }

    var dictionary:[String:Any] {
        return self.dictionaryWithValues(forKeys: ["name","email"]) //Error here
    }
}

代码在 swift 3 上工作,但我在 swift 4 上出现错误var dictionary:[String:Any]

这是错误:

隐式 Objective-C 入口点 -[Myapp.UserModel name] 已弃用,将在 Swift 4 中删除

请任何帮助解决这个问题将不胜感激。

4

1 回答 1

1

您的类继承自 NSObject,并使用 objc KVC,这对 Swift3 来说很好,因为 Swift3 默认假定所有 NSObject 子类为 @objc,在 Swift4 中,您需要声明您的访问器 @objc 以使它们可用于 obj-c KVC 操作。 https://forums.developer.apple.com/thread/81789

于 2018-01-10T13:14:26.830 回答