ios Swift NSUserDefaults setString:forKey:?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/29126731/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Swift NSUserDefaults setString:forKey:?
提问by Yoichi Tagaya
NSUserDefaults has integerForKey:
, setInteger:forKey:
and stringForKey:
, but does not have setString:forKey:
.
NSUserDefaults 有integerForKey:
、setInteger:forKey:
和stringForKey:
,但没有setString:forKey:
。
How do you set a string to NSUserDefaults? It has setObject:forKey:
but, in Swift, String is a struct. Is it ok to use setObject:forKey:
to store a string?
你如何将字符串设置为 NSUserDefaults?它setObject:forKey:
可是,在斯威夫特,字符串是一个结构。可以setObject:forKey:
用来存储字符串吗?
采纳答案by Tommie C.
The reason that setObjectcan be used to apply a string is found in the discussion of the reference:
可以使用setObject来应用字符串的原因在参考文献的讨论中找到:
Since Swift String is bridged to NSString, the usage of setObject is valid. However as the other types mentioned are not accepted in NSUserDefaults using the setObject setter; they have their own convenience setters.
由于 Swift String 被桥接到 NSString,所以 setObject 的用法是有效的。然而,由于使用 setObject setter 的 NSUserDefaults 不接受提到的其他类型;他们有自己的便利设置者。
Notwithstanding this, almost anything one can think of can be serialized and placed into NSUserDefaults using setObject with an NSData argument (as noted elsewhere on SO).
尽管如此,几乎任何可以想到的东西都可以使用带有 NSData 参数的 setObject 序列化并放入 NSUserDefaults 中(如 SO 上的其他地方所述)。
回答by Leo Dabus
update: Xcode 7.0.1 ? Swift 2.0
更新:Xcode 7.0.1?斯威夫特 2.0
let myString = "Hello World"
NSUserDefaults.standardUserDefaults().setObject(myString, forKey: "myString")
if let myLoadedString = NSUserDefaults.standardUserDefaults().stringForKey("myString") {
print(myLoadedString) // "Hello World"
}
The nice thing about Swift is that it allows to you to easily extend the language. You can create your own setString(forKey:), setDate(forKey:), etc... creating a NSUserDefaults extension as follow:
Swift 的好处在于它允许您轻松扩展语言。您可以创建自己的 setString(forKey:)、setDate(forKey:) 等...创建 NSUserDefaults 扩展,如下所示:
extension NSUserDefaults {
func setString(string:String, forKey:String) {
setObject(string, forKey: forKey)
}
func setDate(date:NSDate, forKey:String) {
setObject(date, forKey: forKey)
}
func dateForKey(string:String) -> NSDate? {
return objectForKey(string) as? NSDate
}
}
let name = "Chris Lattner"
let address = "1 Infinite Loop, Cupertino, CA 95014, United States"
let dob = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!.dateWithEra(1, year: 1978, month: 1, day: 1, hour: 0, minute: 0, second: 0, nanosecond: 0)!
NSUserDefaults().setString(name, forKey: "userName")
NSUserDefaults().setString(address, forKey: "userAddress")
NSUserDefaults().setDate(dob, forKey: "userDOB")
let loadedUserName = NSUserDefaults.standardUserDefaults().stringForKey("userName") ?? ""
let loadedUserAddress = NSUserDefaults.standardUserDefaults().stringForKey("userAddress") ?? ""
let loadedUserDOB = NSUserDefaults.standardUserDefaults().dateForKey("userDOB") ?? NSDate.distantPast()
print(loadedUserName) // "Chris Lattner"
print(loadedUserAddress) // "1 Infinite Loop, Cupertino, CA 95014, United States"
print(loadedUserDOB.descriptionWithLocale(NSLocale(localeIdentifier: "en_US"))) // "Sunday, January 1, 1978 at 12:00:00
回答by Daniel Storm
Swift 3 removed .setObject
. Use .set
instead. For example:
斯威夫特 3 删除.setObject
。使用.set
来代替。例如:
// Create UserDefaults
let defaults = UserDefaults.standard
// Save String value to UserDefaults
// Using defaults.set(value: Any?, forKey: String)
defaults.set("Some string you want to save", forKey: "savedString")
// Get the String from UserDefaults
if let myString = defaults.string(forKey: "savedString") {
print("defaults savedString: \(myString)")
}
回答by Gil Sand
You can definitly use setObject:forKey:
, the NSDictionary
method or even setValue:forkey:
which is a KVC
method.
您可以明确地使用setObject:forKey:
,NSDictionary
方法或什至setValue:forkey:
是KVC
方法。
It'll work just fine.
它会工作得很好。