programing

UserDefault가 존재하는지 확인 - Swift

cafebook 2023. 9. 15. 21:19
반응형

UserDefault가 존재하는지 확인 - Swift

아래와 같이 사용자 기본값이 존재하는지 확인하려고 합니다.

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

    if userDefaults.objectForKey(kUSERID) {
        return true
    }

    return false
}

하지만, 그 물체가 아직 존재하지 않을 때에도 그것이 항상 진실로 돌아올 것이라고 해도 상관없이?이것이 존재를 확인하는 올바른 방법입니까?

Astun의 대답은 훌륭합니다.Swift 3 버전은 아래를 참조하십시오.

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

당신의 코드를 복사/붙여 넣었는데 Xcode 6.1.1이 제 방식으로 오류를 던지다가 결국 이런 모습이 되어 매력적으로 작동합니다.감사합니다!

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

스위프트 5:

if UserDefaults.standard.object(forKey: "keyName") != nil {
  //Key exists
}

예, 이것이 올바른 확인 방법입니다.optional갖고 있다nil또는 어떤 가치라도objectForKey메서드 반환AnyObject?어느 것이Implicit optional.

그래서 만약에userDefaults.objectForKey(kUSERID)평가한 것 이상의 가치가 있습니다.true.한다면userDefaults.objectForKey(kUSERID)가지다nil평가한 것보다 더 가치 있는false.

swift programming guide에서

if 문 및 강제 언래핑 if 문을 사용하여 옵션에 값이 포함되어 있는지 여부를 확인할 수 있습니다.옵션에 값이 있으면 true로 평가하고, 값이 전혀 없으면 false로 평가합니다.

이제 키를 설정한 후보다 시뮬레이터에 버그가 있습니다.userDefaults앱을 삭제해도 항상 설정된 상태로 유지됩니다.시뮬레이터를 리셋해야 합니다.

를 설정하기 전에 시뮬레이터를 재설정합니다.userDefaults또는 키 제거userDefaults.removeObjectForKey(kUSERID)부터userDefaults다시 돌아올 겁니다NO.장치에서 해결됩니다.iOS8 beta4.

이는 기본적으로 다른 답변에 제시된 내용과 동일하지만 보다 편리한 방식으로 제공됩니다(Swift 3+:

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

용도:if UserDefaults.contains(kUSERID) { ... }

단순 코드 UserDefault에 값이 저장되어 있는지 확인합니다.

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

여기에 있는 많은 솔루션이 유효합니다.그래도 틀린 문제는 해결해 주는 것 같아요.

일반적으로 이와 같은 코드는 다른 기본값을 사용할 수 있도록 값이 설정되어 있는지 확인하는 데 사용됩니다.

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"아직 키에 대한 값이 설정되지 않은 경우.

신속하게 3.2로

func userAlreadyExist(kUsernameKey: String) -> Bool {
    return UserDefaults.standard.object(forKey: kUsernameKey) != nil
}
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
        }
    }

}

또는 이 라이브러리를 사용해 보십시오: 링크

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

   return true;
}
    override func viewDidLoad(){
    super.viewDidLoad()
    if  UserDefaults.standard.string(forKey: "CHARRY") == "CHARRY"{
        print("true")
    }else{
        print("false")
    }
}

언급URL : https://stackoverflow.com/questions/25104700/check-if-userdefault-exists-swift

반응형