मैं स्विफ्ट में स्ट्रिंग्स, बूलियन और अन्य डेटा को बचाने / पुनः प्राप्त करने के लिए UserDefaults का उपयोग कैसे कर सकता हूं?
मैं स्विफ्ट में स्ट्रिंग्स, बूलियन और अन्य डेटा को बचाने / पुनः प्राप्त करने के लिए UserDefaults का उपयोग कैसे कर सकता हूं?
जवाबों:
रेफरी: NSUserdefault ऑब्जेक्टटाइप्स
दुकान
UserDefaults.standard.set(true, forKey: "Key") //Bool
UserDefaults.standard.set(1, forKey: "Key") //Integer
UserDefaults.standard.set("TEST", forKey: "Key") //setObject
पुन: प्राप्त करें
UserDefaults.standard.bool(forKey: "Key")
UserDefaults.standard.integer(forKey: "Key")
UserDefaults.standard.string(forKey: "Key")
हटाना
UserDefaults.standard.removeObject(forKey: "Key")
सभी कीज निकालें
if let appDomain = Bundle.main.bundleIdentifier {
UserDefaults.standard.removePersistentDomain(forName: appDomain)
}
दुकान
NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "yourkey")
NSUserDefaults.standardUserDefaults().synchronize()
पुन: प्राप्त करें
var returnValue: [NSString]? = NSUserDefaults.standardUserDefaults().objectForKey("yourkey") as? [NSString]
हटाना
NSUserDefaults.standardUserDefaults().removeObjectForKey("yourkey")
registerDefaults: हर खोज सूची में पंजीकरण आइटम को अंतिम आइटम में जोड़ता है। इसका मतलब यह है कि NSUserDefaults के बाद हर दूसरे वैध स्थान में एक मूल्य की तलाश की गई है, यह पंजीकृत चूक में दिखेगा, जिससे उन्हें "कमबैक" मूल्य के रूप में उपयोगी हो जाएगा। पंजीकृत डिफॉल्ट्स को किसी एप्लिकेशन के रन के बीच कभी संग्रहीत नहीं किया जाता है, और केवल उस एप्लिकेशन को दिखाई देता है जो उन्हें पंजीकृत करता है।
डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइलों से डिफ़ॉल्ट मान स्वचालित रूप से पंजीकृत होंगे।
उदाहरण के लिए लॉन्च से ऐप का पता लगाएं, सेव लॉन्च के लिए स्ट्रक्चर बनाएं
struct DetectLaunch {
static let keyforLaunch = "validateFirstlunch"
static var isFirst: Bool {
get {
return UserDefaults.standard.bool(forKey: keyforLaunch)
}
set {
UserDefaults.standard.set(newValue, forKey: keyforLaunch)
}
}
}
एप्लिकेशन लॉन्च पर डिफ़ॉल्ट मान पंजीकृत करें:
UserDefaults.standard.register(defaults: [
DetectLaunch.isFirst: true
])
एप्लिकेशन समाप्ति पर मान निकालें:
func applicationWillTerminate(_ application: UIApplication) {
DetectLaunch.isFirst = false
}
और स्थिति की जाँच करें
if DetectLaunch.isFirst {
// app launched from first
}
एक अन्य प्रॉपर्टी सुइट नाम , जिसका उपयोग ज्यादातर ऐप ग्रुप कॉन्सेप्ट के लिए किया जाता है , उदाहरण उदाहरण जो मैंने यहां से लिया है :
उपयोग का मामला यह है कि मैं Android के SharedPreferences की तरह एक पहचानकर्ता द्वारा अपने UserDefaults (अलग-अलग व्यावसायिक तर्क को अलग-अलग समूहीकृत किए जाने की आवश्यकता हो सकती है) को अलग करना चाहता हूं। उदाहरण के लिए, जब मेरे ऐप में कोई उपयोगकर्ता लॉगआउट बटन पर क्लिक करता है, तो मैं उसके खाते से संबंधित चूक को साफ़ करना चाहता हूं, लेकिन डिवाइस का स्थान नहीं।
let user = UserDefaults(suiteName:"User")
userDefaults का उपयोग सिंक्रनाइज़ हो जाता है, डुप्लिकेट उत्तर में विस्तार से जानकारी जोड़ी गई है।
UserDefaults का उपयोग करने का सर्वोत्तम तरीका
कदम
नमूना
extension UserDefaults{
//MARK: Check Login
func setLoggedIn(value: Bool) {
set(value, forKey: UserDefaultsKeys.isLoggedIn.rawValue)
//synchronize()
}
func isLoggedIn()-> Bool {
return bool(forKey: UserDefaultsKeys.isLoggedIn.rawValue)
}
//MARK: Save User Data
func setUserID(value: Int){
set(value, forKey: UserDefaultsKeys.userID.rawValue)
//synchronize()
}
//MARK: Retrieve User Data
func getUserID() -> Int{
return integer(forKey: UserDefaultsKeys.userID.rawValue)
}
}
कीम के लिए enum डेटा को स्टोर करने के लिए उपयोग किया जाता है
enum UserDefaultsKeys : String {
case isLoggedIn
case userID
}
जहाँ आप चाहते हैं UserDefaults में सेव करें
UserDefaults.standard.setLoggedIn(value: true) // String
UserDefaults.standard.setUserID(value: result.User.id!) // String
एप्लिकेशन में कहीं भी डेटा पुनर्प्राप्त करें
print("ID : \(UserDefaults.standard.getUserID())")
UserDefaults.standard.getUserID()
मान निकालें
UserDefaults.standard.removeObject(forKey: UserDefaultsKeys.userID)
इस तरह से आप आदिम डेटा को सर्वश्रेष्ठ रूप में संग्रहीत कर सकते हैं
अपडेट आपको मूल्यों को संग्रहीत करने के लिए किसी सिंक्रनाइज़ेशन () का उपयोग करने की आवश्यकता नहीं है। जैसा कि @Moritz ने इसे अनावश्यक बताया और इसके बारे में लेख दिया। अधिक विवरण के लिए टिप्पणियाँ देखें
synchronize()
, यह प्रलेखन में समझाया गया है। यह न केवल यहां बेकार है, बल्कि डिफॉल्ट की पहुंच को धीमा कर सकता है।
स्विफ्ट 4 :
दुकान
UserDefaults.standard.set(object/value, forKey: "key_name")
पुनर्प्राप्त
var returnValue: [datatype]? = UserDefaults.standard.object(forKey: "key_name") as? [datatype]
हटाना
UserDefaults.standard.removeObject(forKey:"key_name")
//Save
NSUserDefaults.standardUserDefaults().setObject("yourString", forKey: "YourStringKey")
//retrive
let yourStr : AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("YourStringKey")
आप NSUserDefaults
इस तरह से स्विफ्ट में उपयोग कर सकते हैं ,
@IBAction func writeButton(sender: UIButton)
{
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject("defaultvalue", forKey: "userNameKey")
}
@IBAction func readButton(sender: UIButton)
{
let defaults = NSUserDefaults.standardUserDefaults()
let name = defaults.stringForKey("userNameKey")
println(name) //Prints defaultvalue in console
}
synchronize()
कमांड का उपयोग NSUserDefaults
करें। आईओएस 7 और उससे पहले में यह अधिक आवश्यक हो सकता है, लेकिन आईओएस 8 और इसके अलावा, आपको ज्यादातर स्थितियों में सिंक्रोनाइज़ () नहीं करना चाहिए। अधिक जानकारी के लिए इसे देखें: codingexplorer.com/nsuserdefaults-a-swift-introduction
स्विफ्ट 5 और उससे अधिक:
let defaults = UserDefaults.standard
defaults.set(25, forKey: "Age")
let savedInteger = defaults.integer(forKey: "Age")
defaults.set(true, forKey: "UseFaceID")
let savedBoolean = defaults.bool(forKey: "UseFaceID")
defaults.set(CGFloat.pi, forKey: "Pi")
defaults.set("Your Name", forKey: "Name")
defaults.set(Date(), forKey: "LastRun")
let array = ["Hello", "World"]
defaults.set(array, forKey: "SavedArray")
let savedArray = defaults.object(forKey: "SavedArray") as? [String] ?? [String()
let dict = ["Name": "Your", "Country": "YourCountry"]
defaults.set(dict, forKey: "SavedDict")
let savedDictionary = defaults.object(forKey: "SavedDictionary") as? [String: String] ?? [String: String]()
:)
मैंने एनएसडॉर को सामान्य रूप से बचाया और इसे सही ढंग से प्राप्त करने में सक्षम था।
dictForaddress = placemark.addressDictionary! as NSDictionary
let userDefaults = UserDefaults.standard
userDefaults.set(dictForaddress, forKey:Constants.kAddressOfUser)
// NS सहकर्मी से डेटा प्राप्त करने के लिए।
let userDefaults = UserDefaults.standard
let dictAddress = userDefaults.object(forKey: Constants.kAddressOfUser) as! NSDictionary
class UserDefaults_WorstPresidentName {
static let key = "appname.worstPresidentName"
static var value: String? {
get {
return UserDefaults.standard.string(forKey: key)
}
set {
if newValue != nil {
UserDefaults.standard.set(newValue, forKey: key)
} else {
UserDefaults.standard.removeObject(forKey: key)
}
}
}
}
UserDefault + Helper.swift
import UIKit
private enum Defaults: String {
case countryCode = "countryCode"
case userloginId = "userloginid"
}
final class UserDefaultHelper {
static var countryCode: String? {
set{
_set(value: newValue, key: .countryCode)
} get {
return _get(valueForKay: .countryCode) as? String ?? ""
}
}
static var userloginId: String? {
set{
_set(value: newValue, key: .userloginId)
} get {
return _get(valueForKay: .userloginId) as? String ?? ""
}
}
private static func _set(value: Any?, key: Defaults) {
UserDefaults.standard.set(value, forKey: key.rawValue)
}
private static func _get(valueForKay key: Defaults)-> Any? {
return UserDefaults.standard.value(forKey: key.rawValue)
}
static func deleteCountryCode() {
UserDefaults.standard.removeObject(forKey: Defaults.countryCode.rawValue)
}
static func deleteUserLoginId() {
UserDefaults.standard.removeObject(forKey: Defaults.userloginId.rawValue)
}
}
उपयोग:
मान सहेजें:
UserDefaultHelper.userloginId = data["user_id"] as? String
फ़ेच मान:
let userloginid = UserDefaultHelper.userloginId
मान हटाएं:
UserDefaultHelper.deleteUserLoginId()
मैं अंबु का जवाब कहूंगा पूरी तरह से ठीक है, लेकिन मुझे अपने कार्यक्रम को विफल करने के लिए वरीयताओं को प्राप्त करते समय गार्ड को जोड़ना पड़ा
यहां स्विफ्ट 5 में अपडेटेड कोड स्निप है
UserDefaults में डेटा संग्रहीत करना
@IBAction func savePreferenceData(_ sender: Any) {
print("Storing data..")
UserDefaults.standard.set("RDC", forKey: "UserName") //String
UserDefaults.standard.set("TestPass", forKey: "Passowrd") //String
UserDefaults.standard.set(21, forKey: "Age") //Integer
}
UserDefaults से डेटा प्राप्त करना
@IBAction func fetchPreferenceData(_ sender: Any) {
print("Fetching data..")
//added guard
guard let uName = UserDefaults.standard.string(forKey: "UserName") else { return }
print("User Name is :"+uName)
print(UserDefaults.standard.integer(forKey: "Age"))
}
कक्षा में A
, कुंजी के लिए सेट मान:
let text = "hai"
UserDefaults.standard.setValue(text, forKey: "textValue")
कक्षा में B
, उस कुंजी का उपयोग करके पाठ के लिए मूल्य प्राप्त करें जो कक्षा में घोषित किया गया है A
और इसे संबंधित चर पर असाइन करें जिसकी आपको आवश्यकता है:
var valueOfText = UserDefaults.value(forKey: "textValue")
स्विफ्ट 4, मैंने EnD का उपयोग UserDefaults को संभालने के लिए किया है।
यह सिर्फ एक नमूना कोड है। आप अपनी आवश्यकताओं के अनुसार इसे अनुकूलित कर सकते हैं।
स्टोरिंग, रिट्रीविंग, रिमूवल के लिए। इस तरह बस एनम के लिए अपने UserDefaults कुंजी के लिए एक कुंजी जोड़ें। डेटा टाइप और अपनी आवश्यकताओं के अनुसार भंडारण करते समय मूल्यों को संभालें।
enum UserDefaultsConstant : String {
case AuthToken, FcmToken
static let defaults = UserDefaults.standard
//Store
func setValue(value : Any) {
switch self {
case .AuthToken,.FcmToken:
if let _ = value as? String {
UserDefaults.standard.set(value, forKey: self.rawValue)
}
break
}
UserDefaults.standard.synchronize()
}
//Retrieve
func getValue() -> Any? {
switch self {
case .AuthToken:
if(UserDefaults.standard.value(forKey: UserDefaultsConstant.AuthToken.rawValue) != nil) {
return "Bearer "+(UserDefaults.standard.value(forKey: UserDefaultsConstant.AuthToken.rawValue) as! String)
}
else {
return ""
}
case .FcmToken:
if(UserDefaults.standard.value(forKey: UserDefaultsConstant.FcmToken.rawValue) != nil) {
print(UserDefaults.standard.value(forKey: UserDefaultsConstant.FcmToken.rawValue))
return (UserDefaults.standard.value(forKey: UserDefaultsConstant.FcmToken.rawValue) as! String)
}
else {
return ""
}
}
}
//Remove
func removeValue() {
UserDefaults.standard.removeObject(forKey: self.rawValue)
UserDefaults.standard.synchronize()
}
}
Userdefaults में मान संग्रहीत करने के लिए,
if let authToken = resp.data?.token {
UserDefaultsConstant.AuthToken.setValue(value: authToken)
}
Userdefaults से मान प्राप्त करने के लिए,
//As AuthToken value is a string
(UserDefaultsConstant.AuthToken.getValue() as! String)