2014-11-27 19 views
7

ho una sottoclasse NSManagedObject con un'istanza opzionale variabileAccesso BOOLVALUE in una var NSNumber con concatenamento opzionale (a Swift)

@NSManaged var condition: NSNumber? // This refers to a optional boolean value in the data model 

mi piacerebbe fare qualcosa quando esiste la variabile di condizione e contiene 'vero' .

Certo, posso fare in questo modo:

if let cond = condition { 
if cond.boolValue { 
    // do something 
} 
} 

Tuttavia, ho sperato che sarebbe stato possibile fare la stessa cosa un po 'più compatto, con il concatenamento opzionale. Qualcosa di simile a questo:

if condition?.boolValue { 
    // do something 
} 

Ma questo produce un errore di compilazione:

Optional type '$T4??' cannot be used as a boolean; test for '!= nil' instead

Il modo più compatto per risolvere questo problema è stato questo:

if condition != nil && condition!.boolValue { 
// do something 
} 

c'è davvero nessun modo per l'accesso il valore booleano con concatenamento opzionale o mi manca qualcosa qui?

risposta

14

Si può solo confrontarlo con un valore booleano:

if condition == true { 
    ... 
} 

Alcuni casi di test:

var testZero: NSNumber? = 0 
var testOne: NSNumber? = 1 
var testTrue: NSNumber? = true 
var testNil: NSNumber? = nil 
var testInteger: NSNumber? = 10 

if testZero == true { 
    // not true 
} 

if testOne == true { 
    // it's true 
} 

if testTrue == true { 
    // It's true 
} 

if testNil == true { 
    // not true 
} 

if testInteger == true { 
    // not true 
} 

La cosa più interessante è che 1 è riconosciuto come true - che dovrebbe, perché la type è NSNumber

+0

'testNil == true' raise 'errore fatale: trovato inaspettatamente nil mentre scartando un valore Optional'. Quindi, dovresti scrivere in questo modo 'testNil? .boolValue == true', se non è bello. :( –

+0

L'ho appena testato e funziona correttamente, nessuna eccezione generata È un optional, quindi non si verifica alcuna interruzione forzata, quindi mi chiedo come hai ottenuto l'errore È possibile che l'hai dichiarato come facoltativo da scartare facoltativo per errore? – Antonio

+0

Oh , è un mio errore, questo errore viene generato con Opzionalmente invisibile come 'var testNil: NSNumber! = nil'. Mi dispiace per questo –