[ios] UserDefault가 있는지 확인-Swift

아래에 표시된 사용자 기본값이 있는지 확인하려고합니다.

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

    if userDefaults.objectForKey(kUSERID) {
        return true
    }

    return false
}

그러나 객체가 아직 존재하지 않더라도 항상 true를 반환하는 것은 무엇입니까? 이것이 존재를 확인하는 올바른 방법입니까?



답변

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
}


답변

예, 이것은 optionalhave nil또는 any value objectForKey메서드 반환 을 확인하는 올바른 방법 AnyObject?입니다 Implicit optional.

따라서 userDefaults.objectForKey(kUSERID)평가되는 값보다 true. 경우 userDefaults.objectForKey(kUSERID)nil값을가로 평가보다 false.

신속한 프로그래밍 가이드에서

If 문 및 강제 풀기
if 문을 사용하여 옵션에 값이 포함되어 있는지 확인할 수 있습니다. 옵션에 값이 있으면 true로 평가됩니다. 값이 전혀 없으면 false로 평가됩니다.

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

당신의 시뮬레이터 리셋 에서 키를 설정하기 전에이 방법을 확인 userDefaults하거나 키를 제거 userDefaults.removeObjectForKey(kUSERID)에서 userDefaults
그것은 반환 NO이 해결됩니다 CSTE 연구진 장치 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")
}


답변

신속한 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
        }
    }

}

또는 다음 라이브러리를 사용해 볼 수 있습니다. 링크