Theo dõi bài đăng trên blog tuyệt vời tại đây: https://appventure.me/2015/08/20/swift-pattern-matching-in-detail/#sec-3-7 Tôi đã thử đối sánh mẫu tùy chỉnh. Hãy xác định một enum
đại diện cho hai loại chuỗi:Đối sánh mẫu tùy chỉnh trong Swift 2.2 không hoạt động như mong đợi
enum LineType : String {
case Event = "event:"
case Data = "data:"
}
Tiếp theo, một phần mở rộng String
khả năng nói nếu một chuỗi bắt đầu với một hoặc các giá trị khác của LineType
:
extension String {
func isOfType(type: LineType) -> Bool {
return self.hasPrefix(type.rawValue)
}
}
Sau đó, mô hình tùy chỉnh chức năng phù hợp, kiểm tra xem một chuỗi có thuộc một loại nhất định không:
func ~= (pattern: LineType, value: String) -> Bool {
return value.isOfType(pattern)
}
Cuối cùng, hãy thử nghiệm nó với examp này le:
let testLine = "event:yada-yada-yada"
switch testLine {
case _ where testLine.characters.count == 0:
print("Empty")
case LineType.Event: // <--- Causes the error Enum case 'Event' is not a member of type 'String'
print("Event")
case LineType.Data: // <--- Causes the error Enum case 'Data' is not a member of type 'String'
print("Data")
default:
print("Unknown Type")
}
Vì vậy, nếu ai đó có thể cho tôi biết những gì tôi làm sai ...
Cảm ơn trước.
Trông giống như một lỗi đối với tôi, nó không thể biên dịch nếu mẫu là kiểu liệt kê. –
@MartinR case {LineType.Event}(): in ("Sự kiện") giải quyết sự cố ... hoặc xác định tốt hơn các hằng số cho e = LineType.Event; ... trường hợp e: ... – user3441734