如何使用updateValue在Swift中添加对象

时间:2015-06-06 13:32:26

标签: ios swift nsuserdefaults

我有一个用户结构,我正在向Json投射,以便能够进入NSUserDefaults ......

import Foundation

struct User {
    var name = ""
    var stores: [Store] = []

    init?(json: [String: AnyObject]) {
        if let name = json["name"] as? String,
            storesJSON = json["stores"] as? [[String: AnyObject]]
        {
            self.name = name
            self.stores = storesJSON.map { Store(json: $0)! }
        } else {
            return nil
        }
    }

    init() { }

    func toJSON() -> [String: AnyObject] {
        return [
            "name": name,
            "stores": stores.map { $0.toJSON() }
        ]
    }

}

我正在使用Data Manager类(Singleton)添加新用户。但我无法弄清楚下面的addPerson函数中传递给updateValue的内容是什么?另外还有另一种方法可以将此对象转换为NSUserDefaults吗?

import Foundation

class DataManager {

    static let sharedInstance = DataManager()

    var users = [String : User]()

    init() {
        let userDefaults = NSUserDefaults.standardUserDefaults()

        if let var userFromDefaults = userDefaults.objectForKey("users") as? [String : User] {

            users = userFromDefaults

        }

        else {
            // add default values later

        }


    }

 var userList: [String] {
        var list: [String] = []
        for userName in users.keys {
            list.append(userName)
        }
        list.sort(<)
        return list
    }

 func addPerson(newUserName: String) {
        users.updateValue(User(), forKey: newUserName)
 //       saveData()
    }

2 个答案:

答案 0 :(得分:0)

我认为您已经知道如何创建User对象。这就是你应该作为参数传递给你的下一个函数。像这样的东西。

var aUser = User(["name": textField.text. capitalizedString])
DataManager.sharedInstance.addPerson(aUser)
    func addPerson(newUser: User) {
           users[newUser.name] = newUser
    // saveData()
        }

答案 1 :(得分:0)

您应该更改addPerson功能的界面,使用addPerson(newUser: User)而不是使用addPerson(newUserName: String),因为@ iosDev82说:

// Because your addPerson function needs two parameters: a name and a user object
func addPerson(newUser: User) {
    users.updateValue(newUser, forKey: newUser.name)
 //       saveData()
}

所以你可以:

let newName = textField.text.capitalizedString
let newUser = User(["name": newName, "stores" : []])

DataManager.sharedInstance.addPerson(newUser)