2016-09-04 18 views
7

Tôi đã tìm kiếm nhiều câu hỏi ở đây, tôi đã tìm thấy một câu hỏi có tiêu đề tương tự Enum case switch not found in type, nhưng không có giải pháp cho tôi.Swift: Trường hợp không tìm thấy trong loại

Tôi muốn sử dụng enum với đột biến của chính nó để giải quyết câu hỏi, màu đèn giao thông tiếp theo là gì, ở các trạng thái riêng lẻ.

enum TrafficLights { 
    mutating func next() { 
     switch self { 
     case .red: 
      self = .green 
     case .orange: 
      self = .red 
     case .green: 
      self = .orange 
     case .none: 
      self = .orange 
     } 
    } 
} 

tôi đã đặt tất cả các trường hợp như các tùy chọn có thể, và nó vẫn trở về lỗi:

Enum 'case' not found in type 'TrafficLights'

+0

Tôi đã nhầm lẫn, tôi nghĩ rằng nếu tất cả các trường hợp nằm bên trong func mutating, họ không cần phải được bên ngoài mà func được xác định. Cảm ơn. – GiorgioE

+3

Tôi hy vọng điều này không được sử dụng cho đèn giao thông thực ... – Alnitak

Trả lời

4

Những trường hợp phải được khai báo bên ngoài của hàm:

enum TrafficLights { 

case green 
case red 
case orange 
case none 

mutating func next() { 
    switch self { 
    case .red: 
     self = .green 
    case .orange: 
     self = .red 
    case .green: 
     self = .orange 
    case .none: 
     self = .orange 
    } 
    } 
} 

nên: - Đi qua Enumeration - Apple Documentation

+0

Cảm ơn bạn! Lỗi cơ bản của tôi. Bây giờ nó hoạt động, vì vậy bây giờ nếu tôi loại bỏ trường hợp. Không phải từ chức năng đột biến, nó vẫn sẽ có trường hợp này được xác định, ngay cả khi tôi không cần phải có bước tiếp theo sau trạng thái đó. Đó là những gì tôi đang tìm kiếm. – GiorgioE

+0

Tài liệu: - https://developer.apple.com/library/mac/documentation/Swift/Conceptual/Swift_Programming_Language/Enumerations.html ..:) Mã hóa hạnh phúc – Dravidian

+4

Cũng có thể thêm các trường hợp này vào một dòng, vì vậy ' trường hợp màu xanh lá cây, đỏ, cam, none'. – pedrouan

11

Tôi gặp sự cố với cùng lỗi khi chuyển đổi đến một enum tùy chỉnh:

switch MyEnum(rawValue: 42) { 
case .error: 
    // Enum case `.error` not found in type 'MyEnum?' 
    break 
default: 
    break 
} 

Vấn đề là MyEnum(rawValue: 42) trả về tùy chọn. Hủy bỏ nó hoặc cung cấp một tùy chọn không cho phép chuyển đổi trên enum:

switch MyEnum(rawValue: 42) ?? MyEnum.yourEnumDefaultCase { 
case .error: 
    // no error! 
    break 
default: 
    break 
} 
+2

Tôi khuyên bạn nên sử dụng một cách khác để mở như giá trị mặc định bằng '?': '(MyEnum (rawValue: 42) ?? MyEnum.error)' – dulgan

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