È non può catena opzionale vincolante in questo modo:
if let constantName = someOptional && constantName = someOptional2 {}
ma in Swift 1.2 si può scrivere questo:
if let constantName = someOptional, constantName = someOptional2 {}
cosa sta succedendo qui?
Gli optionals sono di tipo proprio e rappresentano il modo in cui Swift fornisce il controllo della compilazione per nil
. Quando si digita var potentialValue : Int?
non si utilizza alcun Int speciale, si utilizza il tipo Opzionale, che è essenzialmente un enum vuoto. Questo è il motivo per cui spesso è necessario scartare l'opzione con lo !
in quanto ciò consente di accedere a ciò che è all'interno (se c'è qualcosa all'interno). Se l'opzione non contiene alcun valore (ad esempio, l'enumerazione è vuota), ha un valore di None
. Se l'opzione non è vuota, allora ha un valore di Some
e un valore associato di qualsiasi tipo che stai usando - quindi in questo caso un Int.
Questo:
if (someOptional != nil){
let constantName = someOptional!
}
è lo stesso che utilizza questo:
if let constantName = someOptional {}
che si chiama opzionale vincolante. Noterai che la seconda versione qui è un po 'più leggibile e non è necessario scartare esplicitamente l'opzione usando lo !
.
Viene valutato true quando il valore dell'opzione è Some
e non None
- in altre parole, quando l'opzione non è nulla. (Si noti che è ancora possibile verificare la presenza di nil
se ti piace e si può anche cambiare il valore di un optional di nuovo a None
scrivendo someOptional = nil
.
Un'altra cosa che non è stato menzionato è che si può utilizzare ??
(chiamato il nil coalescing operator) per dare un un valore opzionale, se non ne ha uno. ad esempio:
let constantName = someOptional ?? 100
Qui someOptional
verrà scartato se ha un valore, ma se non lo fa, allora il valore 100
è usato al posto
Trovo utile ricordare che gli optionals sono il loro tipo in Swift. Non sono una versione elaborata del tipo che stai dicendo che contengono.
Prima 'someOptional' è spuntato per vedere se il suo' nil'. Se non lo è, quindi 'constantName' è assegnato al valore unwrapped di' someOptional'. Se è 'nil', va all'istruzione' else'. Questo è spiegato in modo approfondito nel vid 'Intermediate Swift':] – Jack
Che dire [la documentazione] (https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/swift_programming_language/TheBasics.html # // apple_ref/doc/uid/TP40014097-CH5-XID_432) non è stato chiaro? – Chuck
@Chuck È come la prima cosa su cui è atterrato lo sguardo, guardando lo swing. Non sono ** familiare con la nozione di 'nil' in questa lingua, né ho mai scritto in esso. Nel chiedere una cosa del genere, mi aspetto anche di ottenere un metodo di ricerca e collegamenti alle giuste pagine di documentazione della lingua. Non mi aspettavo quel livello di elitarismo in una lingua così neonata, forse meglio non scherzare con un linguaggio che ha una comunità così negativa –