2015-03-18 5 views
14

NSUserDefaults integerForKey:, setInteger:forKey: और stringForKey: है, लेकिन setString:forKey: नहीं है।स्विफ्ट NSUserDefaults सेटस्ट्रिंग: forKey :?

आप NSUserDefaults को स्ट्रिंग कैसे सेट करते हैं? इसमें setObject:forKey: है, लेकिन स्विफ्ट में, स्ट्रिंग एक संरचना है। स्ट्रिंग को स्टोर करने के लिए setObject:forKey: का उपयोग करना ठीक है?

+0

setObjectForKey –

उत्तर

10

कारण यह है कि setObject एक स्ट्रिंग लागू करने के लिए इस्तेमाल किया जा सकता में पाया जाता है संदर्भ की चर्चा:

discussion

स्विफ्ट स्ट्रिंग के बाद से NSString को पाट कर रहा है, setObject के उपयोग मान्य है। हालांकि, जैसा कि उल्लिखित अन्य प्रकारों को सेटऑब्जेक्ट सेटर का उपयोग करके NSUserDefaults में स्वीकार नहीं किया जाता है; उनके पास अपने स्वयं के सुविधा सेटर्स हैं।

convenience-inits

इसके बावजूद, लगभग कुछ भी एक के धारावाहिक जा सकता है और रखा setObject का उपयोग कर NSUserDefaults एक NSData तर्क के साथ में सोच सकते हैं (जैसा कि इतने पर कहीं उल्लेख किया है)।

+0

आपके उत्तर के लिए धन्यवाद। अन्य उत्तरों सटीक और सराहनीय हैं लेकिन मैंने यह जवाब स्वीकार करने के लिए लिया क्योंकि यह एनएसएसटींग कक्षा में ब्रिज किए गए स्विफ्ट स्ट्रिंग संरचना के बारे में बताता है। इसके अलावा एनएसडीटा का उपयोग सहायक है। –

4

आप निश्चित रूप से setObject:forKey:, NSDictionary विधि या setValue:forkey: का उपयोग कर सकते हैं जो KVC विधि है।

यह ठीक काम करेगा।

17

अद्यतन: 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" 
} 

स्विफ्ट के बारे में अच्छी बात यह है कि यह आसानी से भाषा का विस्तार करने के आप के लिए अनुमति देता है। आप अपनी खुद की 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 
14

स्विफ्ट 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)") 
} 
+2

लघु और उद्देश्य। धन्यवाद! –

+1

defaults.string (forKey: "savedString") के साथ मान को पुनर्प्राप्त करने के बारे में क्या? ऐसा लगता है कि काम करता है। – RanLearns

+0

@RanLearns महान बिंदु। यकीन नहीं है कि मैंने इसे शुरुआत में क्यों किया था। संपादित। –

संबंधित मुद्दे