Ho un oggetto personalizzato chiamato Campo. Fondamentalmente lo uso per definire un singolo campo in una forma.Swift if let valuta correttamente su Opzionale (nil)
class Field {
var name: String
var value: Any?
// initializers here...
}
Quando l'utente invia il modulo, ho convalidare ciascuna delle Field
oggetti per assicurarsi che essi contengono valori validi. Alcuni campi non sono necessari in modo a volte deliberatamente nil
alla proprietà value
in questo modo:
field.value = nil
Questo sembra costituire un problema quando uso un se-let per determinare se un campo è nullo o meno.
if let value = field.value {
// The field has a value, ignore it...
} else {
// Add field.name to the missing fields array. Later, show the
// missing fields in a dialog.
}
I impostare i punti di interruzione nel sopra if-else e quando field.value
è stato deliberatamente a zero, esso passa attraverso il blocco se-lasciare, non il resto. Tuttavia, per i campi di cui field.value
non è stato inizializzato e non assegnato, , il programma passa al blocco else.
ho provato stampare field.value
e value
all'interno del blocco se-let:
if let value = field.value {
NSLog("field.value: \(field.value), value: \(value)")
}
E questo è ciò che ottengo:
field.value: Opzionale (zero), il valore di: nil
Quindi ho pensato che forse con optionals, una cosa è non inizializzata e un'altra per avere il valore e di zero. Ma aggiungendo un altro se dentro l'if-let non renderemo felice il compilatore:
if let value = field.value {
if value == nil { // Cannot invoke '==' with an argument list of type '(Any, NilLiteralConvertible)'
}
}
Come aggirare questo? Voglio solo verificare se il field.value
è nil
.
Impossibile riprodurre. Quale versione di Xcode usi? –
Xcode 6 GM. Ho provato a ricominciare, ancora senza fortuna. :( –
Puoi pubblicare un esempio completo autosufficiente che dimostri il problema? –