2015-06-26 7 views
9

Non riesco a capire come eseguire un'istruzione if con un valore bool salvato su NSUserDefaults usando swift. Credo di sapere come salvare il bool in NSUserDefaults ma una conferma in questo sarebbe molto apprezzata. Questo è il codice obiettivo-c che sto cercando di capire come usare con swift.Hai bisogno di aiuto per salvare bool in NSUserDefaults e utilizzarlo in un'istruzione if usando Swift

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

questo è quello che ho finora in rapida ...

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

Penso che potrei avere capirlo. Qualcuno può confermare questo è il modo corretto per salvare un bool a NSUserDefaults e utilizzare un'istruzione if con esso. Eccolo ...

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

risposta

9
if NSUserDefaults.standardUserDefaults().objectForKey("onoroff") == true 

Il codice di cui sopra è solo verificare wheather il valore della chiave è vero o no.

o

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

Il controllo di codice di cui sopra wheather il valore della chiave è vero o no e se non v'è alcun valore per la chiave. (Significa nulla inserito nel UserDefault di "onoroff").

EDIT

if !NSUserDefaults.standardUserDefaults().objectForKey("onoroff") 
{ 
    NSUserDefaults.standardUserDefaults().setBool(true, forKey: "onoroff") 
} 
else 
{ 
    NSUserDefaults.standardUserDefaults().setBool(false, forKey: "onoroff") 
} 
+0

Grazie per la risposta. Cosa è più corretto usare per un booleano, objectForKey o boolForKey? –

+0

Entrambi restituiscono lo stesso risultato. Ma objectForKey viene anche utilizzato per verificare che la chiave sia disponibile nel dizionario o meno. –

+0

Grazie ancora V.J. apprezza il tuo aiuto –

3
NSUserDefaults.standardUserDefaults().setObject(Bool(false), forKey:"onoroff") 

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

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

} 

EDIT:

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

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

}else{ 

} 
0

Per controllare il valore bool invece di objectForKey dobbiamo usare boo lForKey. Trovo che come errori nella risposta è stata accettata

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

In Swift 3,0

let defaults = UserDefaults.standard 

Si crea il file di default standard e lo configura, se non esiste, o aprirlo se lo fa.

if !UserDefaults.standard.bool(forKey: "onoroff") { 
      UserDefaults.standard.set(true, forKey: "onoroff") 
    } else { 
      UserDefaults.standard.set(false, forKey: "onoroff") 
    } 

if !defaults.standard.bool(forKey: "onoroff") { 
      defaults.standard.set(true, forKey: "onoroff") 
    } else { 
      defaults.standard.set(false, forKey: "onoroff") 
    } 

Grazie si @Fred per correggere la risposta :-)

+0

Risposta perfetta, grazie – Vivek

+1

Si crea una proprietà ma non la si utilizza nella risposta? se defaults.bool (Forkey: "onoroff")! { defaults.set (vero, Forkey: "onoroff") } else { defaults.set (false, Forkey: "onoroff") } – FredFlinstone

+0

grazie per puntandolo su. @FredFlinstone –

3

La risposta accettata è corretta. Questo è il modo in cui mi piace farlo (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) 
    } 

} 

}

+1

Hai ragione. Ho modificato la risposta. Grazie! –

0

Swift 3

Questo è il codice per l'interruttore, che salverà vero o falso per UserDefaults.

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

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

Poi per mostrare lo stato salvato dello switch ... on/off:

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

Quindi, in realtà 1 linea per impostare lo stato dello switch, e 1 linea per ottenere gli utenti stato salvato e impostare la passare correttamente!