Tôi có một số UIPopoverViewControllers
gửi tin nhắn để ủy quyền UIViewControllers
để chuyển các sự kiện giao diện người dùng. Thay vì viết một phương thức riêng biệt cho mỗi sự kiện, tôi có một phương thức trong ủy nhiệm với một câu lệnh switch để xác định cách xử lý sự kiện dựa trên một hằng số được truyền (ví dụ bên dưới).cách chia sẻ hằng số (enums) giữa các lớp?
Đây có lẽ là thiết kế kém nhưng đó là những gì tôi đã đưa ra. Tôi đã nhìn thấy this câu hỏi liên quan đến enums hoặc các lớp học tĩnh nhưng không hiểu câu trả lời.
Vì vậy, đó là những gì tôi đang làm BAD và có cách nào tôi có thể xác định enums ở một nơi không?
EDIT Được rồi, tìm hiểu thêm một chút (here + here) Tôi thấy rằng tôi có thể đang đi đúng hướng. Vì vậy, tôi đoán tôi cần phải biết những gì và nơi một tập tin implementation
là trong iOS.
enum {
kSetPlaybackType = 0,
kSetAllNotesOn,
kSetAllNotesOff,
kSetVelocity,
kSetDuration
};
- (void)barPropertyAction:(int)action withParam:(NSNumber *)param
{
switch (action) {
case kSetPlaybackType:
playbackType = [param intValue];
if (playbackType == kPalindrome){
palindromeDirection = kPalindromeUp;
}
break;
case kSetAllNotesOn:
for (BarNote* note in self.barNoteArray) {
note.noteOn = YES;
}
[self.bar updateWindows];
break;
case kSetAllNotesOff:
for (BarNote* note in self.barNoteArray) {
note.noteOn = NO;
}
[self.bar updateWindows];
break;
case kSetVelocity:
for (BarNote* note in self.barNoteArray) {
note.velocity = [param intValue];
}
break;
case kSetDuration:
for (BarNote* note in self.barNoteArray) {
note.duration = [param floatValue];
}
break;
default:
break;
}
}
Ngoài ra, một trong những điều anh nên làm là đặt tên enum bằng cách sử dụng 'typedef' và không sử dụng' int' làm tham số, khi enum quy định được mong đợi. – Sulthan
@Sulthan Tôi đã làm điều đó khi bạn nhận xét: D –
Điều này thật tuyệt - cảm ơn! Tôi đã thêm tên hằng số typedef +, và di chuyển các enum defs thành một tập tin .h. Đã có thể sử dụng typedef trong phương thức sig của tôi. '- (void) barPropertyAction: (kBarProperty) action vớiParam: (NSNumber *) param;' –