Come si converte il seguente in Swift da Objective-C?Riga singola se la dichiarazione in Swift
if (myVar) return;
Swift non utilizza le parentesi attorno al condizionale, tuttavia il codice seguente restituisce un errore.
if myVar return
Come si converte il seguente in Swift da Objective-C?Riga singola se la dichiarazione in Swift
if (myVar) return;
Swift non utilizza le parentesi attorno al condizionale, tuttavia il codice seguente restituisce un errore.
if myVar return
In Swift le parentesi non sono opzionali come se fossero in Objective-C (C). I paren d'altra parte sono opzionali. Esempi:
valido Swift:
if someCondition {
// stuff
}
if (someCondition) {
// stuff
}
valido Swift:
if someCondition
// one liner
if (someCondition)
// one liner
Questa decisione design elimina un'intera classe di bug che può venire da impropriamente utilizzando un'istruzione if senza parentesi come il seguente caso , dove potrebbe non essere sempre chiaro che il valore di something
verrà modificato in modo condizionale, ma il valore di somethingElse
cambierà ogni volta.
Bool something = true
Bool somethingElse = true
if (anUnrelatedCondition)
something = false
somethingElse = false
print something // outputs true
print somethingElse // outputs false
Un esempio di bug ampiamente pubblicizzato correlato a questo è [Bug SSL/TLS di Apple] (https: //www.imperialviolet.org/2014/02/22/applebug.html), mentre Swift era in sviluppo. A volte mi chiedo se questa decisione di progettazione sia stata presa per questo, o se sia solo una coincidenza. È un dettaglio interessante di Swift, dal momento che è molto raro che i linguaggi "Mi piace" impongano uno stile di codifica. – Jonas
Errore SSL/TLS di Apple - non indica che il problema è rappresentato da una linea singola. Mostra chiaramente che CMD + V non dovrebbe usare l'impostazione "Key-delay" e "key-repeat" della tastiera e dovrebbe incollare una sola volta. Prova a copiare una riga di testo e premi CMD + V un po 'più del solito. A meno che, lo sviluppatore abbia intenzionalmente messo due "goto fail" consecutivi; supponendo di lavorare in un singolo blocco se, per assicurarsi che se nel caso il puntatore di controllo non obbedisca la prima volta, ripetere una seconda volta sarebbe d'aiuto. "Sei ancora qui ???? Ti ho già detto di fallire .... GOTO FAIL in questo istante !!!" –
Non è possibile inserire parentesi attorno alle istruzioni 'if let'. –
One-line if
, una riga while
e una riga for
sono considerati un cattivo stile da molti sviluppatori, perché sono meno leggibile e presumibilmente una fonte di molti errori.
Swift ha risolto il problema vietando le istruzioni di controllo del flusso a una linea; le parentesi graffe non sono optional ...
if someCondition {
// stuff
}
Naturalmente, si può ancora fare
if someCondition { return }
Ci sono anche ragioni di implementazione. Avere le parentesi intorno alla condizione come facoltativo rende l'analisi molto più difficile. L'applicazione di parentesi semplifica nuovamente l'analisi.
"Presunto" è giusto. Con convenzioni come l'uso costante di parentesi graffe Allman e indentazione, era già molto prevenibile. –
Bene come gli altri ragazzi hanno anche spiegato che le parentesi graffe sono un must in fretta. Ma per semplicità si può sempre fare qualcosa di simile:
let a = -5
// if the condition is true then doThis() gets called else doThat() gets called
a >= 0 ? doThis(): doThat()
func doThis() {
println("Do This")
}
func doThat() {
println("Do That")
}
È possibile utilizzare la nuova Nil-coalescenza operatore, dal momento che Swift 3 nel caso in cui quando si ha bisogno solo di impostare il valore di default in caso di se fallisce:
let someValue = someOptional ?? ""
nel caso in cui someOptional è false
, questo operatore di assegnazione "" per someValue
var dataDesc = (value == 7) ? "equal to 7" : "not equal to 7"
Qui è una soluzione semplice che ho usato nei miei progetti.
Swift 3+
var retunString = (state == "OFF") ? "securityOn" : "securityOff"
differenza Objective C, bretelle sono obbligatori mentre usando if a Swift. La ragione di questo è rendere il codice più sicuro. – ZeMoon
devi aggiungere le parentesi '{}' per tutti i rami, ma le parentesi sono opzionali '()', puoi tenerle se vuoi. – holex