Tho*_*mas 39 string nsuserdefaults nsarray ios swift
我想将Swift样式字符串数组保存到NSUserDefaults中,但实际上代码中的"if"语句表示returnValue始终为nil.
稍后在代码(iOS 8)中我想使用"food + = ["spaghetti"]添加新条目.
var food : [String] {
get {
var returnValue : [String]? = NSUserDefaults.standardUserDefaults().objectForKey("food") as? [String]
if returnValue == nil //Check for first run of app
{
returnValue = ["muesli", "banana"]; //Default value
}
return returnValue!
}
set (newValue) {
NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "food")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
Run Code Online (Sandbox Code Playgroud)
Ima*_*tit 33
以下代码可以帮助您解决问题:
import UIKit
class ViewController: UIViewController {
var food: [String] {
get {
if let returnValue = NSUserDefaults.standardUserDefaults().objectForKey("food") as? [String] {
return returnValue
} else {
return ["muesli", "banana"] //Default value
}
}
set {
NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "food")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
override func viewDidLoad() {
super.viewDidLoad()
print(food) // prints: ["muesli", "banana"] (at first launch)
food = ["cake"]
print(food) // prints: ["cake"]
food += ["spaghetti"]
print(food) // prints: ["cake", "spaghetti"]
food = []
print(food) // prints: []
NSUserDefaults.standardUserDefaults().setObject(nil, forKey: "food")
print(food) // prints: ["muesli", "banana"]
}
}
Run Code Online (Sandbox Code Playgroud)
但是,使用上面的代码,如果设置food = []
,则会出现food
无法返回的问题["muesli", "banana"]
.为避免这种情况,您可能更喜欢以下代码:
import UIKit
class ViewController: UIViewController {
var food: [String] {
get {
if let returnValue = NSUserDefaults.standardUserDefaults().objectForKey("food") as? [String] {
return returnValue == [] ? ["muesli", "banana"] : returnValue
} else {
return ["muesli", "banana"] //Default value
}
}
set {
NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "food")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
override func viewDidLoad() {
super.viewDidLoad()
print(food) // prints: ["muesli", "banana"] (at first launch)
food = ["cake"]
print(food) // prints: ["cake"]
food += ["spaghetti"]
print(food) // prints: ["cake", "spaghetti"]
food = []
print(food) // prints: ["muesli", "banana"]
NSUserDefaults.standardUserDefaults().setObject(nil, forKey: "food")
print(food) // prints: ["muesli", "banana"]
}
}
Run Code Online (Sandbox Code Playgroud)
pNr*_*Nre 13
如文档中所述:
对于NSArray和NSDictionary对象,其内容必须是属性列表对象.
这意味着你需要在保存时将String
对象转换为NSString
这样的东西:
var food : [String] {
get {
var returnValue : [String]? = NSUserDefaults.standardUserDefaults().objectForKey("food") as? [String]
if returnValue == nil //Check for first run of app
{
returnValue = ["muesli", "banana"]; //Default value
}
return returnValue!
}
set (newValue) {
// Each item in newValue is now a NSString
let val = newValue as [NSString]
NSUserDefaults.standardUserDefaults().setObject(val, forKey: "food")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
Run Code Online (Sandbox Code Playgroud)
在Swift 3.0中
商店
UserDefaults.standard.set(newValue, forKey: "yourkey")
UserDefaults.standard.synchronize()
Run Code Online (Sandbox Code Playgroud)
取回
var returnValue: [NSString]? = UserDefaults.standard.object(forKey: "yourkey") as? [NSString]
Run Code Online (Sandbox Code Playgroud)
去掉
UserDefaults.standard.removeObject(forKey: "yourkey")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
44287 次 |
最近记录: |