Как правило, вы должны использовать правильные константы, как объяснил Калеб (+1).
Однако, он может (иногда) быть полезным, чтобы обернуть эти константы в методах класса:
@interface MONColor : NSObject
+ (NSString *)colorName;
@end
@interface MONRedColor : MONColor
@end
MONRedColor.m
NSString * const MONColorName_Red = @"Red";
@implementation MONRedColor
+ (NSString *)colorName
{
return MONColorName_Red;
}
@end
В некоторых случаях это будет умный ассоциировать класс с его константами через интерфейс.
Это также может быть полезно, если строки построены (или нет) по-разному или есть дополнительная логика для выполнения (например, включенные функции или состав URL-адресов) - в зависимости от класса, с которым вы имеете дело.
Прохождение вокруг объекта и селектора может быть проще при работе с некоторыми интерфейсами по сравнению с функциями или произвольными экземплярами (постоянными экземплярами), которые состоят из разных средств.
Хорошо подобранный префикс на символе C идеально подходит для большинства целей.
Так расширяется на это, вы могли бы заявить:
@interface MONResourceDirectoryName : NSObject
+ (NSString *)Archive;
+ (NSString *)Departments;
+ (NSString *)Forms;
+ (NSString *)GoalTracking;
+ (NSString *)Roles;
+ (NSString *)HomeWork;
+ (NSString *)Postings;
+ (NSString *)SignUp;
+ (NSString *)System;
+ (NSString *)Portfolio;
+ (NSString *)Definitions;
@end
затем написать:
NSString * resourceDirectory = [MONResourceDirectoryName Forms];
Вы также можете использовать C Структуры для группировки данных.Я продемонстрирую, используя CFString
с (которые NSString
s), в случае, если вам нужен вариант, который ARC-совместимый:
struct t_mon_resource_directory_name {
CFStringRef const Archive;
CFStringRef const Departments;
CFStringRef const Forms;
CFStringRef const GoalTracking;
CFStringRef const Roles;
CFStringRef const HomeWork;
CFStringRef const Postings;
CFStringRef const SignUp;
CFStringRef const System;
CFStringRef const Portfolio;
CFStringRef const Definitions;
};
extern const struct t_mon_resource_directory_name MONResourceDirectoryName;
const struct t_mon_resource_directory_name MONResourceDirectoryName = {
.Archive = CFSTR("Archive"),
.Departments = CFSTR("Departments"),
.Forms = CFSTR("Forms"),
.GoalTracking = CFSTR("GoalTracking"),
.Roles = CFSTR("Roles"),
.HomeWork = CFSTR("HomeWork"),
.Postings = CFSTR("Postings"),
.SignUp = CFSTR("SignUp"),
.System = CFSTR("System"),
.Portfolio = CFSTR("Portfolio"),
.Definitions = CFSTR("Definitions")
};
Можете ли вы дать мне пример кода. Я хочу определить все константы в классе, как указано выше, и использовать его глобально в ObjectiveC. –
@AfsalMeerakutty Опять же, константы не определены в классах Objective-C. Я объяснил, как Фонд решает задачу, которую вы, кажется, описываете, поэтому, возможно, это поможет вам. Но, в общем, вы не должны ожидать, что каждая практика C# будет работать одинаково на других языках. Если бы между языками не было различий, нам не нужно было бы больше одного языка. – Caleb
этот ответ не имеет смысла. В enum мы можем назначить только значения int. Я знаю, как определить константу в Objective C. Но теперь мне нужно использовать ее глобально в приложении. Поэтому я могу использовать его в любом классе –