আমি কীভাবে সুইফটে ব্যবহারকারীর ডেফল্ট ব্যবহার করতে পারি?


119

আমি সুইফটে স্ট্রিং, বুলিয়ান এবং অন্যান্য ডেটা সংরক্ষণ / পুনরুদ্ধার করতে কীভাবে ব্যবহারকারীর ডেফেল্টগুলি ব্যবহার করতে পারি?


4
আমি এই প্রশ্নটি আবার খুলছি কারণ এটি এই বিষয়টিতে একটি ভাল সাধারণ প্রশ্ন হিসাবে সার্ভার করতে পারে। গৃহীত উত্তরটি আগের চিহ্নিত ডুপ্লিকেটের চেয়েও স্পষ্ট , যা এই প্রশ্নের চেয়েও বেশি নির্দিষ্ট।
সুরগাচ


আমি মনে করি এই প্রশ্নটি স্ট্যাক ওভারফ্লোতে উপলব্ধ রয়েছে আপনার এখানে প্রশ্ন যুক্ত করার আগে অনুসন্ধান করা উচিত
যোগেশ প্যাটেল

উত্তর:


329

রেফ: NSUserdefault অবজেক্ট টাইপ

3 এবং উপরে সুইফ্ট

দোকান

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

সুইফট 2 এবং নীচে

দোকান

NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "yourkey")
NSUserDefaults.standardUserDefaults().synchronize()

পুনরুদ্ধার

  var returnValue: [NSString]? = NSUserDefaults.standardUserDefaults().objectForKey("yourkey") as? [NSString]

অপসারণ

 NSUserDefaults.standardUserDefaults().removeObjectForKey("yourkey")


নিবন্ধন

রেজিস্ট্রার ডেফাল্টস: প্রতিটি অনুসন্ধান তালিকার সর্বশেষ আইটেমটিতে নিবন্ধকরণ অভিধান যোগ করে। এর অর্থ হ'ল এনএসউজারডেফাল্টগুলি অন্য প্রতিটি বৈধ স্থানে একটি মান সন্ধান করার পরে এটি নিবন্ধিত ডিফল্টগুলিতে সন্ধান করবে এবং এগুলিকে "ফলব্যাক" মান হিসাবে কার্যকর করবে। নিবন্ধভুক্ত ডিফল্ট কখনই কোনও অ্যাপ্লিকেশন রানের মধ্যে সংরক্ষণ করা হয় না এবং কেবলমাত্র সেই অ্যাপ্লিকেশনটিতে দৃশ্যমান হয় যা তাদের নিবন্ধভুক্ত করে।

ডিফল্ট কনফিগারেশন ফাইলগুলি থেকে ডিফল্ট মানগুলি স্বয়ংক্রিয়ভাবে নিবন্ধিত হবে।

উদাহরণস্বরূপ অ্যাপ্লিকেশনটি লঞ্চ থেকে সনাক্ত করুন, সংরক্ষণের প্রবর্তনের জন্য কাঠামো তৈরি করুন

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
}

ব্যবহারকারীর নাম স্যুট নাম name

অন্য একটি সম্পত্তি স্যুট নাম , বেশিরভাগ এটি অ্যাপ গ্রুপ ধারণার জন্য ব্যবহৃত হয় , উদাহরণটি আমি এখান থেকে নিয়েছি :

ব্যবহারের কেসটি হ'ল আমি Android এর SharedPreferences এর মতো একটি সনাক্তকারী দ্বারা আমার ইউজারডেফাল্টগুলি (পৃথক ব্যবসায় যুক্তির জন্য পৃথকভাবে গোষ্ঠীকরণের প্রয়োজন হতে পারে) আলাদা করতে চাই। উদাহরণস্বরূপ, যখন আমার অ্যাপ্লিকেশনটিতে কোনও ব্যবহারকারী লগআউট বোতামে ক্লিক করে, আমি তার অ্যাকাউন্ট সম্পর্কিত ডিফল্ট সাফ করতে চাইব তবে ডিভাইসের অবস্থানটি নয়।

let user = UserDefaults(suiteName:"User")

ব্যবহারকারীর ডেফল্টস সিঙ্ক্রোনাইজ করুন , বিশদ তথ্যটি সদৃশ উত্তরে যুক্ত হয়েছে।


কখন এবং কোথায় আপনার স্টোরের পদ্ধতিগুলি কল করা উচিত? অ্যাপটি বন্ধ হওয়ার ঠিক আগে বা প্রতিবারের মানগুলি পরিবর্তন হয়?
জোসেফ

বেশ দুর্দান্ত, সব ধরণের অপারেশনের জন্য একটি জায়গা place
মাইকেলেল পিটারসন

@ আনবু.কার্তিক আপনি কীভাবে ব্যবহারকারীর ডিফল্ট কীগুলির মান আপডেট করবেন?
সাথ্য চিনসাম্যি

2
@ রাজেশবৈদ্য - ব্যবহারকারীর ডিফল্ট সর্বদা কেবল চূড়ান্ত মান সংরক্ষণ করে
আনবু.কার্তিক

অ্যাপ্লিকেশন ইনস্টলেশন / আনইনস্টলেশনের মাধ্যমে এই ডেটাটি কি অবিচ্ছিন্ন থাকে?
অরেঞ্জপট

40

ইউজারডিফল্টস ব্যবহারের সেরা উপায়

ধাপ

  1. ইউজারডিফল্টগুলির এক্সটেনশন তৈরি করুন
  2. স্থানীয় সংরক্ষণের জন্য প্রয়োজনীয় কীগুলি সহ এনাম তৈরি করুন
  3. আপনি যেখানেই চান স্থানীয় ডেটা সঞ্চয় এবং পুনরুদ্ধার করুন

নমুনা

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 UserDefaultsKeys : String {
    case isLoggedIn
    case userID
}

আপনি যেখানে চান সেখানে ইউজার ডেফল্টগুলিতে সংরক্ষণ করুন

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) 

এইভাবে আপনি আদিম ডেটা সবচেয়ে ভাল সঞ্চয় করতে পারেন

আপডেট মানগুলি সংরক্ষণ করতে আপনার কোনও সিঙ্ক্রোনাইজ () ব্যবহারের দরকার নেই। @ মোরিৎজ এটিকে অপ্রয়োজনীয়তার দিকে নির্দেশ করেছেন এবং এটি সম্পর্কে নিবন্ধটি দিয়েছেন more আরও বিশদ জন্য মন্তব্যগুলি দেখুন


আপনার প্রয়োজন নেই synchronize(), এটি ডকুমেন্টেশনে ব্যাখ্যা করা হয়েছে। এটি কেবল এখানেই অকেজো নয় এটি ডিফল্ট অ্যাক্সেসকে ধীর করতে পারে।
এরিক আয়া

হ্যাঁ এটি ডকের মধ্যে উল্লেখ করা হয়েছে। একবার ডিফল্ট ডেটা পরিবর্তন হয়ে গেলে এটি স্বয়ংক্রিয়ভাবে সাশ্রয় হয় তবে কিছু ক্ষেত্রে আপনার মানগুলি অ্যাসিঙ্ক্রোনাস সংরক্ষণ নাও করতে পারে। সুতরাং আমি এটি সিঙ্ক করা ভাল বলে মনে করি।
iSrinivasan27

2
এটি আরও ভাল নয় - এটি এমনকি কখনও কখনও সমস্যার উত্সও। সিঙ্ক ব্যবহার করবেন না, এটি অচল এবং সমস্যাযুক্ত। দেখুন codingexplorer.com/nsuserdefaults-a-swift-introduction উল্লেখযোগ্য হল "Update" অংশ। আমি এ সম্পর্কে অনেক পরীক্ষা চালিয়েছি এবং আমার সমস্ত অ্যাপ্লিকেশনগুলিতে সিঙ্ক করতে সমস্ত কলগুলি সরিয়ে ফেলেছি এবং ভয়াবহ পরিস্থিতিতে এমনকি কখনও সমস্যা হয়নি। তবে ওহে, আপনি যদি অকেজো জিনিস পছন্দ করেন যা আপনার অ্যাপ্লিকেশনটিকে ধীর করতে পারে, সিঙ্ক কল করুন ... নিশ্চিত ...;)
এরিক আয়া

এটা সত্যিই সহায়ক। আমি সিঙ্ক মন্তব্য করেছি ()। সিঙ্ক () ব্যবহার করা প্রয়োজনের ভিত্তিতে তৈরি।
iSrinivasan27

হাই, কীভাবে পৃথক পৃথক ফাইলের মধ্যে nsuserdeafults ডেটা সংরক্ষণ করবেন
দিলীপ তিওয়ারি

15

সুইফট 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") 

Userচ্ছিক হিসাবে 'UserDefaults.standard.synchronize ()' এই রেখার অর্থ কী? @ নিকুঞ্জজোশি
নিশাদ অরোরা

2
//Save
NSUserDefaults.standardUserDefaults().setObject("yourString", forKey: "YourStringKey")

//retrive
let yourStr : AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("YourStringKey")

সুইফ্ট 3 এ: মিনিটগুলি = ব্যবহারকারীর ডেফাল্টস.স্ট্যান্ডার্ড.ওবজেক্ট (ফরকি: "মিনিট") হিসাবে! স্ট্রিং
আলেসান্দ্রো মাত্তিউজি

2

আপনি 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
}

2
এই পোস্টের প্রথম সংস্করণটি পরিবর্তনগুলি করার পরে আপনার জিনিসগুলি সংরক্ষণ করা হয়েছে তা নিশ্চিত করার জন্য synchronize()কমান্ডটি ব্যবহার NSUserDefaultsকরতে বলেছে । এটি আইওএস 7 এবং এর আগেও আরও বেশি প্রয়োজন হতে পারে তবে আইওএস 8 এবং এর পরেও আপনাকে বেশিরভাগ পরিস্থিতিতে সিঙ্ক্রোনাইজ () না বলা উচিত। আরও তথ্যের জন্য এটি পরীক্ষা করে দেখুন: কোডিংগজপ্লোরার
ধর্মেশ খেেনি

2

সুইফট 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]()

:)


1

আমি এনএসডেটোরিকে সাধারণত সংরক্ষণ করেছি এবং এটি সঠিকভাবে পেয়েছি।

 dictForaddress = placemark.addressDictionary! as NSDictionary
        let userDefaults = UserDefaults.standard
        userDefaults.set(dictForaddress, forKey:Constants.kAddressOfUser)

// এনএসডি অভিধান থেকে ডেটা পাওয়ার জন্য।

let userDefaults = UserDefaults.standard
    let dictAddress = userDefaults.object(forKey: Constants.kAddressOfUser) as! NSDictionary

আপনার সাহায্য মিস করার জন্য ধন্যবাদ। :)
ভেঙ্কটেশ

1
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)
            }
        }
    }
}

1

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()

1

আমি বলতাম আনবুর উত্তর পুরোপুরি ঠিক আছে তবে আমার প্রোগ্রামটি ব্যর্থ না হওয়ার জন্য পছন্দগুলি আনার সময় আমাকে গার্ড যুক্ত করতে হয়েছিল

এখানে সুইফট 5- এ আপডেট হওয়া কোড স্নিপ

ইউজারডিফল্টে ডেটা সংরক্ষণ করা

@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

    }

ইউজারডিফল্টস থেকে ডেটা আনছে

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

0

শ্রেণিতে A, কীটির মান নির্ধারণ করুন:

let text = "hai"  
UserDefaults.standard.setValue(text, forKey: "textValue")

শ্রেণিতে ক্লাসে Bঘোষিত কীটি ব্যবহার করে পাঠ্যের জন্য মানটি পান এবং Aআপনার প্রয়োজনীয় ভেরিয়েবলের কাছে এটি নির্ধারণ করুন:

var valueOfText  = UserDefaults.value(forKey: "textValue")

0

সুইফট 4, আমি ব্যবহারকারীর ডেফল্টগুলি পরিচালনা করার জন্য এনাম ব্যবহার করেছি।

এটি কেবলমাত্র একটি নমুনা কোড। আপনার প্রয়োজনীয়তা অনুসারে আপনি এটি কাস্টমাইজ করতে পারেন।

সংরক্ষণ, পুনরুদ্ধার, সরানোর জন্য For এইভাবে enum এ আপনার ব্যবহারকারীর ডেফাল্ট কীটির জন্য একটি কী যুক্ত করুন। ডেটা টাইপ এবং আপনার প্রয়োজনীয়তা অনুসারে প্রাপ্ত ও সঞ্চয় করার সময় মানগুলি হ্যান্ডেল করুন।

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()
    }
}

ব্যবহারকারীর ডেফল্টগুলিতে কোনও মান সঞ্চয় করার জন্য,

if let authToken = resp.data?.token {
     UserDefaultsConstant.AuthToken.setValue(value: authToken)
    }

ব্যবহারকারীর ডেফল্ট থেকে কোনও মান পুনরুদ্ধারের জন্য,

//As AuthToken value is a string
    (UserDefaultsConstant.AuthToken.getValue() as! String)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.