Swift NSUserDefaults setString:forKey:?

NSUserDefaults有integerForKey:setInteger:forKey:stringForKey:但没有setString:forKey: stringForKey:

你如何设置一个stringNSUserDefaults? 它有setObject:forKey:但是,在Swift中,String是一个结构。 是否可以使用setObject:forKey:来存储一个string?

在参考文献的讨论中可以findsetObject可用于应用string的原因:

讨论

由于Swiftstring桥接到NSString,所以setObject的使用是有效的。 但是,因为提到的其他types不被NSUserDefaults使用setObject设置器接受; 他们有自己的便利制定者。

便民inits

尽pipe如此,几乎任何人可以想到的东西都可以被序列化,并使用带有NSData参数的setObject放置到NSUserDefaults中(如SO中的其他位置所述)。

更新: Xcode 7.0.1•Swift 2.0

 let myString = "Hello World" NSUserDefaults.standardUserDefaults().setObject(myString, forKey: "myString") if let myLoadedString = NSUserDefaults.standardUserDefaults().stringForKey("myString") { print(myLoadedString) // "Hello World" } 

Swift的好处在于它允许你轻松地扩展语言。 你可以创build自己的setString(forKey :),setDate(forKey :)等…创build一个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 

Swift 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)") } 

你可以明确地使用setObject:forKey:NSDictionary方法,甚至setValue:forkey:这是一个KVC方法。

它会工作得很好。