web-dev-qa-db-fra.com

Besoin d'aide pour économiser bool sur NSUserDefaults et l'utiliser dans une instruction if avec Swift

J'ai du mal à comprendre comment faire une déclaration if avec une valeur booléenne enregistrée dans NSUserDefaults à l'aide de Swift. Je crois que je sais comment sauver le bool à NSUserDefaults mais une confirmation en serait grandement appréciée. C’est le code objectif-c que j’essaie de comprendre comment utiliser Swift.

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"onoroff"]) {
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"onoroff"];
}

c'est ce que j'ai jusqu'à présent dans Swift ...

if  NSUserDefaults.standardUserDefaults().objectForKey("onoroff") != nil{
    NSUserDefaults.standardUserDefaults().setBool(false, forKey: "onoroff")
}

Je pense que je pourrais l'avoir compris. Quelqu'un peut-il confirmer que c'est le bon moyen de sauvegarder un bool sur NSUserDefaults et d'utiliser une instruction if avec ce dernier? C'est ici...

if  !NSUserDefaults.standardUserDefaults().boolForKey("onoroff"){
     NSUserDefaults.standardUserDefaults().setBool(true, forKey: "onoroff")
}else{ NSUserDefaults.standardUserDefaults().setBool(false, forKey: "onoroff")
     }
11
Emmanuel Amaro
if NSUserDefaults.standardUserDefaults().boolForKey("onoroff") == true

Le code ci-dessus est seulement vérifier si la valeur de la clé est vraie ou pas.

ou

if NSUserDefaults.standardUserDefaults().objectForKey("onoroff")

Le code ci-dessus vérifie si la valeur de la clé est vraie ou pas aussi bien s’il n’ya pas de valeur pour la clé (cela ne signifie rien inséré dans le défaut par défaut de "onoroff").

MODIFIER

if !NSUserDefaults.standardUserDefaults().objectForKey("onoroff")
{
     NSUserDefaults.standardUserDefaults().setBool(true, forKey: "onoroff")
}
else
{
    NSUserDefaults.standardUserDefaults().setBool(false, forKey: "onoroff")
}
9
V.J.

La réponse acceptée est correcte. C'est comme ça que j'aime le faire (Swift 3.0):

struct Settings {

fileprivate struct Keys {
    static let soundKey = "soundKey"
}

static var sound: Bool {
    set {
        UserDefaults.standard.set(newValue, forKey: Keys.soundKey)
    }
    get {
        if UserDefaults.standard.object(forKey: Keys.soundKey) == nil {
            // Value for sound not yet set ... Setting default ...

            UserDefaults.standard.set(true, forKey: Keys.soundKey)
            return true
        }
        return UserDefaults.standard.bool(forKey: Keys.soundKey)
    }

}

}

5
Jovan Stankovic
NSUserDefaults.standardUserDefaults().setObject(Bool(false), forKey:"onoroff")

var onoroff = NSUserDefaults.standardUserDefaults().objectForKey("onoroff") as Bool!

if (onoroff != nil && onoroff == false)
{

}

MODIFIER:

NSUserDefaults.standardUserDefaults().setBool(false, forKey: "onoroff")

if NSUserDefaults.standardUserDefaults().boolForKey("onoroff"){

}else{

}
3
Pavan Jangid

Pour vérifier la valeur bool au lieu de objectForKey , nous devons utiliser boolForKey . Je trouve cela comme une erreur dans la réponse que vous avez acceptée

       if (NSUserDefaults.standardUserDefaults().boolForKey("onoroff")){
            NSUserDefaults.standardUserDefaults().setBool(true, forKey: "onoroff")
        }else
        {
            NSUserDefaults.standardUserDefaults().setBool(false, forKey: "onoroff")
        }
0
Nischal Hada

Swift 3

Ceci est un code pour le commutateur, qui enregistrera true ou false dans UserDefaults.

let defaults = UserDefaults.standard
@IBOutlet weak var mySwitch: UISwitch!

@IBAction func switchValueChanged(_ sender: Any) {
    self.defaults.set(mySwitch.isOn, forKey: "mySwitch")
}

Ensuite, pour afficher l'état de sauvegarde du commutateur ... activé/désactivé:

override func viewDidLoad() {
    super.viewDidLoad() 
    mySwitch.isOn = self.defaults.bool(forKey: "mySwitch")
}

Donc, vraiment 1 ligne pour définir l’état du commutateur, et 1 ligne pour obtenir l’état de sauvegarde de l’utilisateur et régler le commutateur correctement! 

0
Mike