Tôi đã gặp khó khăn khi tìm/hiểu tài liệu về cách so sánh enums trong Swift theo thứ tự định nghĩa của chúng. Cụ thể khi tôi tạo một đếm nhưThứ tự liệt kê Swift và so sánh
enum EnumType {
case First, Second, Third
}
Swift không cho phép tôi để so sánh trực tiếp enums theo lệnh, chẳng hạn như
let type1 = EnumType.First
let type2 = EnumType.Second
if type1 < type2 {println("good")} // error
nó tạo ra lỗi biên dịch "không thể gọi '<' với danh sách đối số các loại {EnumType, EnumType}. vì vậy, giải pháp duy nhất tôi đã tìm thấy là viết khai thác của riêng tôi so sánh như quá tải, chẳng hạn như
enum EnumType : Int {
case First = 0, Second, Third
}
func <(a: EnumType, b: EnumType) -> Bool {
return a.rawValue < b.rawValue
}
let type1 = EnumType.First
let type2 = EnumType.Second
if type1 < type2 {println("good")} // Returns "good"
Đây là tất cả tốt một thứ tốt cho các "enum nặng" có nhiều giá trị sử dụng và giá trị trong ứng dụng của tôi, nhưng quá tải tất cả các toán tử tôi muốn sử dụng dường như quá nặng nề đối với các enums "nhẹ" mà tôi có thể xác định khi bay hằng số cho một mô-đun nhỏ.
Có cách nào để thực hiện việc này mà không cần viết nhiều mã nạp chồng lên cho mỗi loại enum mà tôi xác định trong dự án của mình không? Thậm chí tốt hơn, có cái gì đó tôi đang thiếu để làm cho Swift tự động cung cấp các toán tử so sánh cho các enums đơn giản mà không có các kiểu liên quan, tức là. không được gõ hoặc gõ là Int? Swift biết cách so sánh Ints, vậy tại sao nó không thể so sánh enum Ints?
Bạn có thể sử dụng thuộc tính 'hashValue', như được mô tả trong [câu trả lời này] (http://stackoverflow.com/a/27094973/148357). Hãy chắc chắn để đọc tuyên bố cuối cùng :) – Antonio