2015-11-23 19 views
6

Tôi đã cố gắng làm theo một số hướng dẫn iOS Swift để kết nối với Parse.comtrong Swift, cú pháp cụ thể này có ý nghĩa gì?

codementor.io tutorial:

loginViewController.fields = .UsernameAndPassword | .LogInButton | .PasswordForgotten | .SignUpButton | .Facebook | .Twitter 

makeschool tutorial

loginViewController.fields = [.UsernameAndPassword, .LogInButton, .SignUpButton, .PasswordForgotten, .Facebook] 

tôi giả trước đây là Chuyển 1.x, và thelatter là Swift 2. Từ ngữ cảnh chúng xuất hiện để làm điều tương tự, nhưng tôi chưa tìm thấy tài liệu tham khảo ngôn ngữ cho cú pháp thay đổi. Rất khó tìm kiếm dấu chấm, đường ống và dấu phẩy ... ai đó có thể giải thích cú pháp trong mỗi đoạn mã không? (Tôi đang nghiên cứu đọc kỹ thông số ngôn ngữ, nhưng sẽ rất thú vị khi thực sự làm cho ứng dụng hoạt động!)

Trả lời

7

Các cũ cú pháp Swift 1 được dựa trên cách bạn đối phó với bộ tùy chọn trong C và Objective-C: bạn lưu trữ một tùy chọn thiết lập trong một kiểu số nguyên và sử dụng toán tử Bitwise (|&~) để thao tác chúng. Vì vậy, .UsernameAndPassword | .LogInButton có nghĩa là một tùy chọn được đặt trong đó cả tùy chọn .UsernameAndPassword và các tùy chọn .LogInButton được bao gồm. Trong cú pháp cũ, bạn sử dụng nil để đại diện cho một bộ tùy chọn trống (trong đó không có tùy chọn được bao gồm), không rõ ràng dựa trên cú pháp cho một tập rỗng.

Chris Lattner mô tả cú pháp đã thay đổi trong WWDC 2015 Session 106: What's New in Swift. Trước tiên, anh mô tả các vấn đề với cú pháp cũ:

Vấn đề là khi bạn sử dụng các cú pháp khác mà bạn sử dụng, nó sẽ kém hơn một chút. Bạn tạo một bộ tùy chọn trống với số không - nó không có ý nghĩa bởi vì các bộ tùy chọn và các tùy chọn là các khái niệm hoàn toàn khác nhau và chúng được liên kết với nhau. Bạn giải nén chúng với các hoạt động bitwise, đó là một cơn đau và siêu dễ bị lỗi, và bạn có thể làm cho nó sai một cách dễ dàng.

Sau đó ông mô tả cách tiếp cận mới:

Nhưng Swift 2 giải quyết này. Nó làm cho bộ tùy chọn thiết lập như thế nào. Điều đó có nghĩa là các bộ và bộ tùy chọn giờ đã được tạo thành với các dấu ngoặc vuông. Điều đó có nghĩa là bạn nhận được các tập rỗng với một tập hợp các dấu ngoặc vuông trống, và bạn nhận được tập hợp đầy đủ các API bộ tiêu chuẩn để làm việc với các bộ tùy chọn.

Lý do làm việc cú pháp mới là vì OptionSetType phù hợp với ArrayLiteralConvertible giao thức (gián tiếp, bằng cách tuân theo SetAlgebraType). Giao thức này cho phép một đối tượng phù hợp được khởi tạo bằng cách sử dụng một mảng chữ, bằng cách có một init có danh sách các phần tử.

Trong cú pháp Swift 2 mới, [ .UsernameAndPassword, .LogInButton ] đại diện cho tập hợp tùy chọn chứa cả các tùy chọn .UsernameAndPassword.LogInButton. Lưu ý rằng nó trông giống như cú pháp mà bạn có thể khởi tạo một đồng bằng cũ Set: let intSet: Set<Int> = [ 17, 45 ]. Cú pháp mới làm cho nó rõ ràng rằng bạn chỉ định một tùy chọn trống thiết lập là [].

1

Swift không còn hỗ trợ toán tử thanh dọc sử dụng dòng đầu tiên của bạn nữa. Thứ hai là lấy các trường hợp khác nhau của một liệt kê và mô tả chúng như một tập hợp tùy chọn. Dưới đây là một ví dụ from the Swift docs:

enum CompassPoint { 
    case North 
    case South 
    case East 
    case West 
} 

directionToHead = .South 

switch directionToHead { 
case .North: 
    print("Lots of planets have a north") 
case .South: 
    print("Watch out for penguins") 
case .East: 
    print("Where the sun rises") 
case .West: 
    print("Where the skies are blue") 
} 

// prints "Watch out for penguins" 
+0

"Thứ hai là lấy các trường hợp khác nhau của một điều tra và đưa chúng vào một mảng". Không, thứ hai là một sự thay thế cho người đầu tiên. – NobodyNada

+0

@NobodyNada có, cả hai đều làm điều tương tự - chúng mô tả một tập hợp các trường hợp enum. – tylersimko

+2

Loại, nhưng đó là một bộ tùy chọn, không phải là một mảng. – NobodyNada

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