2010-05-14 6 views
9

Tôi đọc ở đâu đó về cho các giá trị mặc định enums như vậy:Objective-C/C giá trị mặc định cho enums

typedef enum { 
MarketNavigationTypeNone = 0, 
MarketNavigationTypeHeirachy = 1, 
MarketNavigationTypeMarket = 2 
} MarketNavigationLevelType; 

.. nhưng tôi không thể nhớ những giá trị để làm điều này. Nếu tôi không cung cấp cho họ giá trị mặc định - và sau đó một người nào đó về việc sắp xếp lại enum - những rủi ro là gì?

Nếu tôi luôn sử dụng tên enum và thậm chí không đề cập đến chúng theo giá trị số nguyên của chúng, có rủi ro không?

Vấn đề duy nhất có thể tôi có thể nghĩ đến là nếu tôi khởi tạo một enum từ giá trị int từ một DB - và enum được sắp xếp lại - sau đó ứng dụng sẽ phá vỡ.

Trả lời

2

Nói chung điều này chỉ quan trọng nếu enum được tiếp xúc với một số loại API bên ngoài hoặc nó sẽ được sử dụng để trao đổi dữ liệu thông qua các tệp dữ liệu hoặc các phương tiện khác. Nếu enum là chỉ được sử dụng trong ứng dụng của bạn và không nơi nào khác thì giá trị thực tế không quan trọng.

7

Đó không phải là giá trị mặc định, bạn sẽ cung cấp cho chúng các giá trị mà chúng luôn có.

Nếu bạn không khởi tạo chúng một cách rõ ràng, giá trị điều tra viên đầu tiên bằng không. Đối với tất cả những người khác, nếu không có initializer, giá trị của họ là giá trị của điều tra trước đó tăng một.

Có hai lý do đã cho họ những giá trị rõ ràng:

  • bạn không muốn họ có giá trị mà họ muốn có khác
  • bạn muốn làm cho nó rõ ràng những gì giá trị mà họ có (ví bạn hoặc các nhà phát triển khác)

Nếu bạn luôn đề cập đến họ theo tên của họ và không bao giờ sử dụng giá trị không thể tách rời để so sánh hoặc chuyển nhượng, hãy cho họ biết giá trị là không cần thiết.

+0

"Giá trị mặc định" - vâng tôi biết chúng là hằng số - tôi chỉ sử dụng sai cụm từ. Bạn đã không đề cập đến thực tế lưu trữ các enums bên ngoài ứng dụng và sau đó tái khởi tạo chúng sau đó? – bandejapaisa

+0

@ban: Điều đó sẽ được gán rõ ràng cho chúng một số giá trị tích phân nếu giao diện bên ngoài không sử dụng enum với định nghĩa tương đương. –