2015-07-16 22 views
12

Credo che Swift è un linguaggio moderno molto ben costruito, tuttavia, v'è una cosa che mi puzzle, e questa è la motivazione per avere (nil < = 0) == true e (nil < 0) = = veroQualcuno conosce la logica dietro "(nil <0) == true" e "(nil <= 0) == true" in Swift?

Qui ci sono più casi:

enter image description here

In ogni caso, il ritorno vero per nil < 0 sembra andare contro l'intero concetto facoltativa, in cui uno degli argomenti era su come evitare l'inizializzazione numero predefinito di " 0" . Ora "0" è di nuovo speciale.

Chiunque ha qualche spiegazione Swift ha deciso di avere (n. < = 0) e (nil < 0) restituisce true.

+3

Non penso che abbia nulla a che fare con 0, per dire. Inserisci un numero qualsiasi e (nil <= n) == true sarà sempre vero. Dato che Swift è un linguaggio più funzionale, nil ha bisogno di essere UNO tipo di valore, e sembra che lo abbiano scelto per rappresentare l'infinito negativo (quando lo si confronta con un int), mentre in Objective-C, se provi le stesse cose, vedi che nil è in realtà uguale a 0. Quindi in realtà non ha l'inizializzazione predefinita su 0. –

risposta

14

Gli optionals sono paragonabili, quindi possono essere ordinati, ad esempio. Le regole sono molto semplici:

  1. Qualsiasi due opzionali che sono pari a zero.
  2. Se uno degli optional è nullo e l'altro no, nil è minore di non zero.
  3. Se entrambi gli optionals non sono nulli, vengono confrontati i valori unwrapped.

Di conseguenza, nil è uguale a zero e nil è minore di qualsiasi opzione non nulla.

Non ha nulla a che fare con il valore 0 assegnato. Assegna -1000 o +100 o qualsiasi altra cosa e ottieni lo stesso risultato.

+0

Molto intelligente, questo è il motivo. Sono arrabbiato con me stesso per non aver pensato a questo. –

+0

È possibile utilizzare l'operatore a coalescenza nil con il concatenamento opzionale per aggirarlo e continuare a godersi l'abbreviazione swifty nifty ad es. 'let isZoomed = (visualizza come? MetalView) ?. cameraPosition.z ?? 0.0 <0.0'. Tuttavia, nei limiti della leggibilità. –

+0

'nil == nil' genera un errore di sintassi in Playgrounds e in un programma .swift. Questo è con Xcode 7.3.1. –

3

Quando si confrontano due opzioni quando uno è nullo e l'altro un valore, il valore è sempre "più grande" perché non c'è nulla.

Così

nil < 0 = true  Because 0 is some value but nil isn't 
nil == 0 = false Makes sense because 0 isn't nil 
nil <= 0 = true Same as before 

0 può anche essere sostituito con qualsiasi valore e lo stesso risultato sarebbe prodotto. In realtà la funzione

func < <T>(lhs: T?, rhs: T?) -> Bool 

non sembra neanche al valore di fondo, se uno di loro è pari a zero, si dice semplicemente: un certo valore è più grande di alcun valore e Nessun valore è uguale a nessun valore

+0

sì, hai ragione. Dovrebbe aver guardato il codice. –

Problemi correlati