2015-06-08 16 views
30

Gần đây tôi đã nhìn thấy bài phát biểu của WWDC 2015 từ Apple. Tôi cũng xem xét một số tài liệu nhưng tôi không thể tìm thấy phần "mẫu phù hợp trong if", cách nó được viết trên một trong các trang trình bày mà chúng đã hiển thị. (68 phút 00 giây video từ Apple Events)Swift 2 - Khớp mẫu trong "if"

Bạn có biết điều này đề cập đến điều gì không? Hoặc cú pháp?

Trả lời

57

Tất cả điều đó thực sự có nghĩa là nếu các câu lệnh hiện hỗ trợ khớp mẫu giống như các câu lệnh chuyển đổi đã có. Ví dụ, sau đây là một cách hợp lệ để sử dụng if/else if/else statement để "switch" trong trường hợp của enum.

enum TestEnum { 
    case One 
    case Two 
    case Three 
} 

let state = TestEnum.Three 

if case .One = state { 
    print("1") 
} else if case .Two = state { 
    print("2") 
} else { 
    print("3") 
} 

Và sau đây là cách kiểm tra có thể chấp nhận nếu someInteger nằm trong một phạm vi nhất định.

let someInteger = 42 
if case 0...100 = someInteger { 
    // ... 
} 

Dưới đây là một vài chi tiết ví dụ bằng cách sử dụng mô hình tùy chọn từ The Swift Programming Language

let someOptional: Int? = 42 
// Match using an enumeration case pattern 
if case .Some(let x) = someOptional { 
    print(x) 
} 

// Match using an optional pattern 
if case let x? = someOptional { 
    print(x) 
} 
+4

Và hai câu cuối cùng là - nếu tôi hiểu nó một cách chính xác - tương đương với nổi tiếng 'nếu để cho x = someOptional {} '. –

+1

Đó là một viễn cảnh thú vị, tôi đã chờ đợi điều đó từ khi Swift ra mắt. – cjnevin

+7

@MartinR vâng, chúng có thể khiến bạn tự hỏi tại sao mẫu tùy chọn có thể hữu ích thay vì sử dụng cú pháp ràng buộc tùy chọn 'if let x = someOptional'. Trong thực tế, điều này không hữu ích khi được sử dụng trong các câu lệnh 'if' đơn giản như ở đây, nhưng hữu ích hơn với các vòng' for' hoặc 'while' (như' for case let x? In arrayOfOptionalInts' chỉ lặp lại các giá trị không phải là nil trong mảng), hoặc cho các câu lệnh 'if' phức tạp hơn như' if case let (x ?, y?) trong someFuncThatReturnsATupleOfOptionals() 'sẽ chỉ đúng nếu cả hai phần tử trong tuple đều không phải là nil và sau đó liên kết cả x và y cùng một lúc. – AliSoftware

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