如何使用 updateValue 在 Swift 中添加对象
how to use updateValue to add an object in Swift
我有一个要转换为 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: [=11=])! }
} else {
return nil
}
}
init() { }
func toJSON() -> [String: AnyObject] {
return [
"name": name,
"stores": stores.map { [=11=].toJSON() }
]
}
}
我正在使用数据管理器 class(单例)添加新用户。但是我不知道要在下面的 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()
}
我想您已经知道如何创建 User
对象。这就是您应该作为参数传递给后续函数的内容。像这样的东西。
var aUser = User(["name": textField.text. capitalizedString])
DataManager.sharedInstance.addPerson(aUser)
func addPerson(newUser: User) {
users[newUser.name] = newUser
// saveData()
}
您应该更改 addPerson
函数的界面,使用 addPerson(newUser: User)
而不是 @iosDev82 所说的 addPerson(newUserName: String)
:
// 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)
我有一个要转换为 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: [=11=])! }
} else {
return nil
}
}
init() { }
func toJSON() -> [String: AnyObject] {
return [
"name": name,
"stores": stores.map { [=11=].toJSON() }
]
}
}
我正在使用数据管理器 class(单例)添加新用户。但是我不知道要在下面的 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()
}
我想您已经知道如何创建 User
对象。这就是您应该作为参数传递给后续函数的内容。像这样的东西。
var aUser = User(["name": textField.text. capitalizedString])
DataManager.sharedInstance.addPerson(aUser)
func addPerson(newUser: User) {
users[newUser.name] = newUser
// saveData()
}
您应该更改 addPerson
函数的界面,使用 addPerson(newUser: User)
而不是 @iosDev82 所说的 addPerson(newUserName: String)
:
// 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)