Swift NSUserDefaults setString:forKey:?

Yoi*_*aya 17 nsuserdefaults ios swift

有NSUserDefaults的integerForKey:,setInteger:forKey:stringForKey:,但没有setString:forKey:.

如何将字符串设置为NSUserDefaults?它有setObject:forKey:但是,在Swift中,String是一个结构.可以setObject:forKey:用来存储字符串吗?

Leo*_*bus 19

更新: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"
}
Run Code Online (Sandbox Code Playgroud)

关于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
Run Code Online (Sandbox Code Playgroud)


Dan*_*orm 16

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)")
}
Run Code Online (Sandbox Code Playgroud)

  • 简短而客观.谢谢! (2认同)

Tom*_* C. 12

可以使用setObject来应用字符串的原因可在参考讨论中找到:

讨论

由于Swift String桥接到NSString,因此setObject的用法有效.但是,因为使用setObject setter在NSUserDefaults中不接受所提到的其他类型; 他们有自己的便利设置者.

便民inits

尽管如此,几乎任何人都能想到的东西都可以被序列化并使用带有NSData参数的setObject放入NSUserDefaults(如SO所述).