Swift NSUserDefaults setSsortingng: forKey :?

NSUserDefaults a integerForKey: setInteger:forKey: et ssortingngForKey: mais n'a pas setSsortingng:forKey:

Comment définissez-vous une string à NSUserDefaults? Il a setObject:forKey: mais, dans Swift, Ssortingng est une structure. Est-ce correct d'utiliser setObject:forKey: pour stocker une string?

La raison pour laquelle setObject peut être utilisé pour appliquer une string se trouve dans la discussion de la reference:

discussion

Comme la string Swift est reliée à NSSsortingng, l'utilisation de setObject est valide. Cependant, comme les autres types mentionnés ne sont pas acceptés dans NSUserDefaults en utilisant setObject setter; ils ont leurs propres setters de commodité.

commodité-inits

Malgré cela, presque tout ce que l'on peut penser peut être sérialisé et placé dans NSUserDefaults en utilisant setObject avec un argument NSData (comme noté ailleurs sur SO).

mise à jour: Xcode 7.0.1 • Swift 2.0

 let mySsortingng = "Hello World" NSUserDefaults.standardUserDefaults().setObject(mySsortingng, forKey: "mySsortingng") if let myLoadedSsortingng = NSUserDefaults.standardUserDefaults().ssortingngForKey("mySsortingng") { print(myLoadedSsortingng) // "Hello World" } 

La bonne chose à propos de Swift est qu'il vous permet d'étendre facilement la langue. Vous pouvez créer votre propre setSsortingng (forKey :), setDate (forKey :), etc … en créant une extension NSUserDefaults comme suit:

 extension NSUserDefaults { func setSsortingng(ssortingng:Ssortingng, forKey:Ssortingng) { setObject(ssortingng, forKey: forKey) } func setDate(date:NSDate, forKey:Ssortingng) { setObject(date, forKey: forKey) } func dateForKey(ssortingng:Ssortingng) -> NSDate? { return objectForKey(ssortingng) 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().setSsortingng(name, forKey: "userName") NSUserDefaults().setSsortingng(address, forKey: "userAddress") NSUserDefaults().setDate(dob, forKey: "userDOB") let loadedUserName = NSUserDefaults.standardUserDefaults().ssortingngForKey("userName") ?? "" let loadedUserAddress = NSUserDefaults.standardUserDefaults().ssortingngForKey("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 a supprimé .setObject . Utilisez .set place. Par exemple:

 // Create UserDefaults let defaults = UserDefaults.standard // Save Ssortingng value to UserDefaults // Using defaults.set(value: Any?, forKey: Ssortingng) defaults.set("Some ssortingng you want to save", forKey: "savedSsortingng") // Get the Ssortingng from UserDefaults if let mySsortingng = defaults.ssortingng(forKey: "savedSsortingng") { print("defaults savedSsortingng: \(mySsortingng)") } 

Vous pouvez definitly utiliser setObject:forKey: NSDictionary méthode NSDictionary ou encore setValue:forkey: qui est une méthode KVC .

Ça marchera très bien.