2015-06-05 20 views
7

Có một số cách để unwrap một giá trị tùy chọn:Nếu let var - Unwrapping giá trị tùy chọn

// 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) 
} 

Nhưng gần đây tôi thử nghiệm này sau một ...

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

Bạn có thể giải thích cho tôi tại sao nó hoạt động? Đó là lỗi hoặc chức năng?

EDIT

Như niñoscript nói, đó là một lỗi.

Nó được giải quyết trong Swift 2.0, tôi đã thử nó với phiên bản mới và nó không biên dịch nữa.

Bây giờ Xcode ném lỗi này sau cho "nếu chúng ta hãy var" xcode error

+5

Nó rõ ràng cho phép bạn sử dụng bất kỳ hai 'nếu chúng ta hãy để cho ...', 'nếu chúng ta hãy var ...', 'nếu var cho ... ', và' nếu var var ... '. 'Var' hoặc' let' thứ hai điều khiển khả năng biến đổi. Có vẻ như một lỗi cú pháp không được báo cáo lạ đối với tôi. – vacawama

Trả lời

5

Câu trả lời này chỉ có giá trị đối với Xcode 6, các lỗi đã được cố định trong Xcode 7 như ghi nhận của biên tập của OP và Paul Jarysta của câu trả lời

Trong trường hợp này:

if let var strUnwrapped = str {} 

let var hoạt động theo cách tương tự như chỉ var, do đó, hoặc là một lỗi hoặc nó chỉ là điều tương tự. Nhưng nếu bạn cố gắng mã đơn giản sau đây:

let var n = 3 

Nó ném lỗi này:

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

Vì vậy, chúng ta có thể yên tâm rằng nó là một lỗi. Chúng ta nên là nhà phát triển tốt và báo cáo nó!

+1

Lỗi rất lạ! – ondermerol

2

Vấn đề này đã được giải quyết trong xcode 7 ;-)

enter image description here

Các vấn đề liên quan