ইউজারডিফল্ট বিদ্যমান কিনা তা পরীক্ষা করুন - সুইফট


87

আমি ব্যবহারকারীর ডিফল্ট উপস্থিত আছে কিনা তা নীচে দেখার চেষ্টা করছি:

func userAlreadyExist() -> Bool {
    var userDefaults : NSUserDefaults = NSUserDefaults.standardUserDefaults()

    if userDefaults.objectForKey(kUSERID) {
        return true
    }

    return false
}

যাইহোক, কোন বিষয়বস্তু এখনও অবজেক্টের অস্তিত্ব না থাকা সত্ত্বেও সত্যটি ফিরে আসবে কি না? এটি কি অস্তিত্ব যাচাইয়ের সঠিক উপায়?

উত্তর:


129

আস্তুনের দুর্দান্ত উত্তর রয়েছে। সুইফট 3 সংস্করণের জন্য নীচে দেখুন।

func isKeyPresentInUserDefaults(key: String) -> Bool {
    return UserDefaults.standard.object(forKey: key) != nil
}

29

আমি আপনার কোডটি অনুলিপি / পেস্ট করেছি তবে এক্সকোড 6.1.1 আমার পথে কিছু ত্রুটি ছুঁড়েছিল, এটি এর মতো দেখতে শেষ হয়ে গেছে এবং এটি একটি কবজির মতো কাজ করে। ধন্যবাদ!

func userAlreadyExist(kUsernameKey: String) -> Bool {
    return NSUserDefaults.standardUserDefaults().objectForKey(kUsernameKey) != nil
}

কাজ করছে! তবে আপনি প্যারামিটারটি ভুলে গেছেন তাই আমি এটি যুক্ত করে দিয়েছি
জেসি ওনোলেমেন

21

হ্যাঁ এই চেক করতে সঠিক উপায় optionalআছে nilবা কোনো মান objectForKeyপদ্ধতি আয় AnyObject?যা Implicit optional

সুতরাং userDefaults.objectForKey(kUSERID)এটির মূল্যায়নের চেয়ে যদি কোনও মান থাকে true। যদি userDefaults.objectForKey(kUSERID)হয়ে গেছে nilমান তুলনায় এটি মূল্যায়ণ false

সুইফ্ট প্রোগ্রামিং গাইড থেকে

বিবৃতি এবং জোর করে আন-র্যাপিং যদি আপনি একটি anচ্ছিক একটি মান আছে কিনা তা জানতে একটি বিবৃতি ব্যবহার করতে পারেন। যদি কোনও alচ্ছিকের কোনও মান থাকে তবে এটি সত্যকে মূল্যায়ন করে; যদি এর কোনও মূল্য না থাকে তবে এটি মিথ্যাতে মূল্যায়ন করে।

userDefaultsআপনি কীভাবে আপনার অ্যাপ্লিকেশন মুছুন তা বিবেচনা না করেই কী সেট করার পরে সিমুলেটরগুলিতে একটি বাগ রয়েছে । আপনাকে সিমুলেটরটি পুনরায় সেট করতে হবে।

আপনার সিমুলেটার রিসেট কী সংযোজনা করার আগে এই পদ্ধতি পরীক্ষা userDefaultsবা কী অপসারণ userDefaults.removeObjectForKey(kUSERID)থেকে userDefaults এবং এটি ফিরে আসবে NO.On ডিভাইসের এটা সমাধান করা iOS8 beta4


" objectForKeyপদ্ধতিটি AnyObject!AnyObject?
প্রত্যাশিত যা Impচ্ছিক

4
@ লিওডাবাস সুইফট এতবার পরিবর্তন হয়েছে। ধন্যবাদ বিটিডব্লিউ আমি এটি পরিবর্তন করেছি।
কোডস্টার

10/25/2016 অনুসারে ডক্সে লাইনটি এখন বলেছে "শূন্যের তুলনায় alচ্ছিকের সাথে তুলনা করে optionচ্ছিকের কোনও মান রয়েছে কিনা তা জানতে আপনি একটি বিবৃতি ব্যবহার করতে পারেন।" সমান "অপারেটরের সাথে আপনি এই তুলনাটি সম্পাদন করেন (= =) বা "সমান নয়" অপারেটর (! =) "। এক্সকোড 7.3.1 আপনি যদি চেষ্টা করে থাকেন if anOptional { }এবং একটি সংকলন ত্রুটি প্রদর্শন করবে এবং এটি আপনাকে == শূন্য বা! =
শূন্যপদ

14

এটি অন্যান্য উত্তরের পরামর্শ মতো তবে একইভাবে আরও সুবিধাজনক উপায়ে (সুইফট 3+):

extension UserDefaults {
    static func contains(_ key: String) -> Bool {
        return UserDefaults.standard.object(forKey: key) != nil
    }
}

ব্যবহার: if UserDefaults.contains(kUSERID) { ... }


তারপর এটি কারণ আপনি একটি Singleton অ্যাক্সেস ফাংশন স্ট্যাটিক করতে ইন্দ্রিয় তোলে মান : static func contains(key: String) -> Bool। অন্যথায়, আরও বুদ্ধিমান করে তোলেreturn self.object(forKey: key) != nil
যাযাবর বিকাশকারী

5

ইউজারডিফল্টে মান সঞ্চিত আছে কিনা তা পরীক্ষা করার জন্য সহজ কোড।

let userdefaults = UserDefaults.standard
if let savedValue = userdefaults.string(forKey: "key"){
   print("Here you will get saved value")       
} else {
   print("No value in Userdefault,Either you can save value here or perform other operation")
   userdefaults.set("Here you can save value", forKey: "key")
}


0
public class PreferencesUtils {

    private init() {

    }

    public static func setBoolData(boolValue: Bool, dataName: String) {
        UserDefaults.standard.set(boolValue, forKey: dataName)
    }

    public static func getBoolData(dataName: String)-> Bool{

        let defaults = UserDefaults.standard

        if(defaults.value(forKey: dataName) != nil) {
            return defaults.value(forKey: dataName)! as! Bool

        } else {
            return false
        }
    }

    public static func saveStringData(data: String, dataName: String){
        let preferences = UserDefaults.standard
        preferences.set(data, forKey: dataName)
        let didSave = preferences.synchronize()
        if !didSave {
            debugPrint("Not saved yet")
        }
    }

    public static func getSavedStringData(dataName: String)-> String{
        let defaults = UserDefaults.standard
        if(defaults.value(forKey: dataName) != nil){
            return defaults.value(forKey: dataName) as! String
        } else {
            return ""
        }
    }

    public static func saveIntData(data : Int, dataName: String){
        let preferences = UserDefaults.standard
        preferences.set(data, forKey: dataName)
        let didSave = preferences.synchronize()
        if !didSave {
            debugPrint("Not saved yet")
        }
    }

    public static func getSavedIntData(dataName: String) -> Int {
        let defaults = UserDefaults.standard
        if(defaults.value(forKey: dataName) != nil){
            return defaults.value(forKey: dataName) as! Int
        }else{
            return 0
        }
    }

}

অথবা আপনি এই লাইব্রেরিটি চেষ্টা করতে পারেন: লিঙ্ক


0
func keyExists(key: String) -> Bool {
    guard let _ = UserDefaults.standard.object(forKey: key) {
     return false;
    }

   return true;
}

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

0

ওভাররাইড ফানক ভিউডিডলড () {

সুপার.ভিউডিলড ()

if UserDefaults.standard.string (forKey: "CHARRY") == "CHARRY"

 lb.text = "CHARRY"

 im.image = UIImage(named: "CHARRY")

}}

@IBAction func PressedCar(_ sender: UIButton){

 lb.text = "CHARRY"

 im.image = UIImage(named: "CHARRY")

 UserDefaults.standard.set("CAR", forKey: "CHARRY")


}

0

এখানে অনেকগুলি সমাধান বৈধ। তবুও, আমি মনে করি তারা ভুল সমস্যার সমাধান করে।

সাধারণত, কোনও মান সেট করা থাকে কিনা তা পরীক্ষা করতে এই জাতীয় কোড ব্যবহার করা হয় যাতে অন্য একটি ডিফল্ট মান ব্যবহার করা যায়:

if isKeyPresentInUserDefaults(key: "username") {
    return UserDefaults.standard.string(forKey: "username")
} else {
    return "No username was set"
}

কী কী সেট করা আছে কি না তা আপনার যত্ন নেওয়া উচিত নয়। এখানে ডিফল্ট মান থাকার জন্য আরও অনেক মার্জিত পদ্ধতি রয়েছে UserDefaults:

UserDefault.standard.register(defaults: ["username": "No username was set"])

আপনি যদি অ্যাপ্লিকেশন লঞ্চে এই কোডটি চালনা করেন তবে পরবর্তী কলগুলি কীটির জন্য কোনও মান সেট না করা থাকলে UserDefaults.standard.string(forKey: "username")তার ডিফল্ট মানটি ফিরিয়ে দেবে "No username was set"

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.