Quindi, in Objective-C quando si utilizza booleani è possibile, e incoraggiato, a scrivere codice usando diverso da zero il valore di una variabile, in quanto il suo valore booleano, che significa che è possibile scrivere codice come questo:Swift booleano controllo
if (someBool) {
// Stuff
}
Inoltre, ci sono ragioni per le quali il codice come il seguente è sconsigliato:
if (someBool == YES) {
// Might run into problems here
}
I motivi per cui il controllo di una booleana contro un altro booleano sono meglio spiegato here, ma per breve tempo il problema è solo che quando si sta confrontando l'uguaglianza di YES
o NO
direttamente, si sta effettivamente confrontando con 1
e 0
, rispettivamente. Poiché Objective-C consente di utilizzare valori diversi da zero come valore di verità, è possibile finire per confrontare qualcosa che dovrebbe essere considerato vero contro YES
e avere l'espressione risolta in NO
, ad es.
int trueNumber = 2;
if (trueNumber == YES) {
// Doesn't run because trueNumber != 1
}
È ancora un problema in Swift? Problemi di stile del codice a parte, se vedo qualcosa di simile al seguente
var someBool = true
if someBool == true {
// stuff
}
è che sta per essere un problema, o non importa davvero? Questi confronti in stile C stanno ancora avvenendo sotto il cofano, o c'è qualcosa di incorporato nel Swift BooleanType che impedisce questi problemi?
Ok, quindi il motivo per cui il codice che era un problema in Objective-C non è un problema è semplicemente a causa del rigoroso controllo dei tipi in Swift? Sembra che per essere usato nei controlli booleani in Swift, un tipo deve sostanzialmente restituire un 'Bool' tipicamente scritto (come mostrato sopra), che evita il problema che C e Objective-C hanno avuto con il' typedef ha firmato il char'. È così semplice? – Ziewvater
@Ziewvater Sì, corretto – Kametrixom