2015-06-05 17 views
7

C'è qualche modo a scartare un valore facoltativo:Se let var - Unwrapping valore opzionale

// 1st way 
var str: String? = "Hello, playground" 
if let strUnwrapped = str { 
    // strUnwrapped is immutable 
    println(strUnwrapped) 
} 

// 2nd way 
var str: String? = "Hello, playground" 
if var strUnwrapped = str { 
    // strUnwrapped is mutable 
    strUnwrapped = "Toldino" 
    println(strUnwrapped) 
} 

Ma di recente ho provare questa successiva ...

// The strangest one 
var str: String? = "Hello, playground" 
if let var strUnwrapped = str { 
    // strUnwrapped is mutabe 
    strUnwrapped = "yolo" 
    println(strUnwrapped) 
} 

si può spiegare a me perché fa funziona ? È un bug o una funzionalità?

EDIT

Come niñoscript Detto questo, era un bug.

È stato risolto in Swift 2.0, l'ho provato con la nuova versione e non si compila più.

Ora Xcode lanciare questa seguente errore per "se lasciare var" xcode error

+5

Apparentemente consente di utilizzare qualsiasi due 'se lasciare che lascia ...', 'se lasciare che var ...', 'se var let ... ', e' se var var ... '. Il secondo 'var' o' let' controlla la mutabilità. Mi sembra uno strano errore di sintassi non segnalato. – vacawama

risposta

5

Questa risposta è valida solo per Xcode 6, il bug è stato risolto in Xcode 7 come ha osservato di modifica del PO e Paul Jarysta di risposta

In questo caso:

if let var strUnwrapped = str {} 

let var funziona allo stesso modo come solo var, quindi o è un bug o è solo la stessa cosa. Ma se si tenta il seguente codice semplice:

let var n = 3 

Getta questo errore:

'var' cannot appear nested inside another 'var' or 'let' pattern

Quindi possiamo supporre con sicurezza che si tratta di un bug. Dovremmo essere dei buoni sviluppatori e segnalarlo!

+1

Bug molto strano! – ondermerol

2

Questo problema è stato risolto in Xcode 7 ;-)

enter image description here

Problemi correlati