2016-08-19 13 views
23

Cựu đang Swift 3 cho nhà điều hành là:Swift3: làm thế nào để xử lý precedencegroup bây giờ nhà điều hành nên được khai báo với một cơ thể?

infix operator × {associativity left precedence 150} 

Nhưng bây giờ, khi mỗi Xcode 8 beta 6, điều này tạo ra các cảnh báo sau đây:

"operator should not be declared with body" 

đúng cách để sử dụng precedencegroup ngữ như là không có gì doc tồn tại ngay bây giờ?

Tôi đã cố gắng này, nhưng không hoạt động:

infix operator × : times 
precedencegroup times { 
    associativity: left 
    precedence: 150 
} 
+0

Mã táo thanh toán, có thể là điều này sẽ giúp: https://github.com/apple/swift/blob/3d005f3ad90f041325e7a28fd9d0544324ac24d6/test/Parse/operator_decl.swift –

Trả lời

51

Theo SE-0077, các ưu tiên của một nhà điều hành không còn được quyết định bởi một con số kỳ diệu - thay vì bây giờ bạn sử dụng higherThan và (nếu nhóm nằm trong một mô-đun khác) lowerThanprecedencegroup các mối quan hệ để xác định mức độ ưu tiên tương đối so với các nhóm khác.

Ví dụ (từ evolution proposal):

// module Swift 
precedencegroup Additive { higherThan: Range } 
precedencegroup Multiplicative { higherThan: Additive } 

// module A 
precedencegroup Equivalence { 
    higherThan: Comparative 
    lowerThan: Additive // possible, because Additive lies in another module 
} 
infix operator ~ : Equivalence 

1 + 2 ~ 3 // same as (1 + 2) ~ 3, because Additive > Equivalence 
1 * 2 ~ 3 // same as (1 * 2) ~ 3, because Multiplicative > Additive > Equivalence 
1 < 2 ~ 3 // same as 1 < (2 ~ 3), because Equivalence > Comparative 
1 += 2 ~ 3 // same as 1 += (2 ~ 3), because Equivalence > Comparative > Assignment 
1 ... 2 ~ 3 // error, because Range and Equivalence are unrelated 

Mặc dù trong trường hợp của bạn, vì nó xuất hiện rằng nhà điều hành của bạn được sử dụng cho phép nhân, bạn có thể chỉ cần sử dụng MultiplicationPrecedence nhóm các thư viện chuẩn, mà được sử dụng cho nhà điều hành *:

infix operator × : MultiplicationPrecedence 

Được định nghĩa là:

precedencegroup MultiplicationPrecedence { 
    associativity: left 
    higherThan: AdditionPrecedence 
} 

Để có danh sách đầy đủ các nhóm ưu tiên thư viện chuẩn, cũng như thông tin thêm về thay đổi này, hãy xem evolution proposal.

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