Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 检查UserDefault是否存在-Swift_Ios_Swift_Nsuserdefaults - Fatal编程技术网

Ios 检查UserDefault是否存在-Swift

Ios 检查UserDefault是否存在-Swift,ios,swift,nsuserdefaults,Ios,Swift,Nsuserdefaults,我试图检查是否存在用户默认值,如下所示: func userAlreadyExist() -> Bool { var userDefaults : NSUserDefaults = NSUserDefaults.standardUserDefaults() if userDefaults.objectForKey(kUSERID) { return true } return false } 然而,不管发生什么,即使对象还不存在,它也将

我试图检查是否存在用户默认值,如下所示:

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

    if userDefaults.objectForKey(kUSERID) {
        return true
    }

    return false
}

然而,不管发生什么,即使对象还不存在,它也将始终返回true?这是检查存在性的正确方法吗?

是的,这是检查
可选
have
nil
或任何值
objectForKey
方法返回
AnyObject?
的正确方法,它是
隐式可选

因此,如果
userDefaults.objectForKey(kUSERID)
的值大于其计算结果
true
。如果
userDefaults.objectForKey(kUSERID)
具有
nil
值,则其计算结果为
false

从swift编程

如果语句和强制展开 您可以使用if语句来确定可选项是否包含值。如果某个可选项确实有值,则其计算结果为 是的;如果它根本没有值,则计算结果为false

现在模拟器中有一个错误,在
userDefaults
中设置key之后,无论你删除你的应用程序,它们总是保持设置。你需要重置模拟器

重置模拟器
userDefaults
中设置键之前检查此方法,或从
userDefaults中删除键
userDefaults。从
userDefaults中删除objectforkey(kUSERID)

它将返回
NO
。在设备上,它在
iOS8 beta4
中解析,我复制/粘贴了您的代码,但Xcode 6.1.1向我抛出了一些错误,它最终看起来像这样,工作起来很有魅力。谢谢

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

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

阿斯顿有一个很好的答案。有关Swift 3版本,请参见下文

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

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

检查值是否存储在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")
}

这与其他答案中的建议基本相同,但更方便(Swift 3+):

用法:
if UserDefaults.contains(kUSERID){…}

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

super.viewDidLoad()

如果UserDefaults.standard.string(forKey:“CHARRY”)=“CHARRY”{

} }


这里的许多解决方案都是有效的。不过,我认为他们解决了错误的问题

通常,这样的代码用于检查是否设置了一个值,以便可以使用另一个默认值:

如果iskeypresentinguserdefaults(键:“用户名”){
返回UserDefaults.standard.string(forKey:“用户名”)
}否则{
return“未设置用户名”
}
您不应该关心是否设置了关键点。在
UserDefaults
中有一种更优雅的方法来设置默认值:

UserDefault.standard.register(默认值:[“用户名”:“未设置用户名”])

如果您在应用程序启动时运行此代码,则对
UserDefaults.standard.string(forKey:“username”)
的后续调用将返回默认值
“未设置用户名”
,如果尚未为键设置值。

objectForKey
方法返回
AnyObject!
,这是隐式可选的”这是错误的,它返回
AnyObject?
@LeoDabus Swift已经更改了很多次。谢谢,顺便说一句,我已经改变了这一点。截至2016年10月25日,文档中的行现在显示“您可以使用if语句通过将可选项与零进行比较来确定可选项是否包含值。您可以使用“等于”运算符(=)或“不等于”运算符(!=)执行此比较。”如果您尝试
如果选择{}
,Xcode 7.3.1将显示编译错误,并建议您使用==nil或!=尼尔森成功了!但是您忘记了参数,所以我添加了它。然后,将函数设为静态是有意义的,因为您正在访问一个单例标准:
static func contains(key:String)->Bool
。否则,使
返回self.object(forKey:key)!=无
请不要只发布代码作为答案,还要解释代码的作用以及如何回答问题。带有解释的答案通常更有帮助,质量更好,更容易吸引选票。
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;
}
 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")


}