Tôi mới đến Obj-C để tha thứ cho tôi nếu đây là một câu hỏi ngu ngốc:Lớp phong cách Java-enum trong Mục tiêu-C?
Làm thế nào để thực hiện một số trong phong cách của enums Javas? Hoặc chính xác hơn:
Tôi muốn một lớp học có một số thuộc tính đã biết được khắc phục vào thời gian biên dịch và duy nhất cho mỗi trường hợp. Ngoài ra, tôi chỉ muốn một loại cá thể.
Để tôi cho một ví dụ trong Java:
public enum MessageTypes {
DEFAULT("white", "standard", 1),
EXPRESS("red", "expressMessage", 2),
BORADCAST("green", "broadcast", 3);
String color; String tagName; int dbId;
MessageTypes(String color, String tagName, int dbId) {
// you get the idea
}
//some methonds like getEnumByTagName
}
Làm thế nào bạn sẽ làm điều gì đó như thế này trong Objective-C? Tui bỏ lỡ điều gì vậy? Đây có phải là một mô hình xấu?
Cảm ơn trước!
EDIT: Tôi xin lỗi, nếu tôi không tự làm rõ. Tôi biết, rằng enj-c enums không phải là những gì tôi đang tìm kiếm (vì họ chỉ nhỉnh hơn một typedef đến một int).
Tôi muốn tạo một tập hợp các thể loại (loại đơn lẻ, không thay đổi) của một lớp cụ thể. Mẫu đơn trong Apples Dev-Docs không được sử dụng vì tôi muốn có nhiều cá thể riêng biệt của một lớp với mỗi giá trị riêng lẻ trong các thuộc tính của chúng.
Mục đích của việc này là có nhiều loại Tin nhắn (khoảng 20) có thể được gán cho một Tin nhắn làm tài sản. Mỗi loại Tin nhắn của tôi có màu (sửa và được xác định trước), thuộc tính-giá trị (trong một biểu diễn XML) và một số ID.
Trong Java, tôi sẽ sử dụng một enum như trong mẫu mã của tôi. Nhưng làm cách nào để tạo các MessageTypes khác nhau và liên kết chúng với các thuộc tính của chúng trong Obj-C?
Tạo 20 Sublcasses của MessageType (mỗi một singleton-instance giữ các thuộc tính) có vẻ như rất nhiều công việc cho một nhiệm vụ đơn giản như vậy và tổng số quá mức cần thiết.
Cách tiếp cận hiện tại của tôi là tạo một lớp với NSArray chứa các phiên bản khác nhau. Lên trên truy cập đầu tiên của một phương thức như +(id)messageTypeForId:NSInteger id_
NSArray được chuẩn bị sẵn. Nhưng điều này cảm thấy hoàn toàn vụng về và không hoàn toàn thanh lịch ...
Có cách tiếp cận thỏa mãn hơn không?
Macro càng xấu trong quan điểm của tôi nhưng tôi thực sự thích giải pháp đầu tiên của bạn. Điều đó có vẻ tốt hơn (và nhiều ca cao hơn) so với cách tiếp cận của tôi. Cảm ơn bạn. –
Tôi thấy cách 'mặc định' và' chia sẻ' được sử dụng bởi quy ước trong một số lớp, có các tiền tố khác như thế không? – zekel
Trong giải pháp đầu tiên của bạn, tại sao bạn kiểm tra nếu thisMessageType là không trước khi gọi phân bổ? Không phải lúc nào cũng không phải vì dòng trước nó? Thx để giúp đỡ một newbie. –