2013-10-05 3 views
0

Довольно простой вопрос. У меня есть все строки ниже, которые я использую в классе. Эти строки добавляются к одной строке вместе с другими данными для создания читаемой выходной строки.Класс iOS, правильный способ реализовать несколько строк?

В настоящее время у меня есть единственный метод, и я просто инициализирую все строки точно так, как указано внизу в самом методе. Я намереваюсь сделать несколько других методов, которые будут использовать те же самые строки внутри класса, поэтому мой вопрос заключается в том, чтобы просто сделать все свойства и инициализировать их, чтобы они могли использоваться во всем классе, как показано ниже (i не знаете рабочий код). Или есть лучший способ, которым я должен подходить к этому, я знаю, что он будет работать, как я предлагаю, но, как новый, я бы хотел в какой-то момент научиться правильному способу делать что-то. Приветствуйте заранее за любую помощь.

@interface

@property (сильный, неатомической) NSString * lbLabel;

... .. .. ..для каждый один .. @end

@implementation

- (ID) инициализации { self.lbLabel = NSLocalizedString (@ "lb", @ "lb"); .... и так далее для всех остальных ...... }

@end

// English 
NSString *lbLabel = NSLocalizedString(@"lb", @"lb"); 
NSString *mLabel = NSLocalizedString(@"m", @"m"); 
NSString *mphLabel = NSLocalizedString(@"mph", @"mph"); 
NSString *inchLabel = NSLocalizedString(@"in", @"in"); 


// Metric 
NSString *kgLabel = NSLocalizedString(@"kg", @"kg"); 
NSString *kLabel = NSLocalizedString(@"k", @"k"); 
NSString *kphLabel = NSLocalizedString(@"kp/h", @"kp/h"); 
NSString *cmLabel = NSLocalizedString(@"cm", @"cm"); 


//Both 
NSString *liftLabel = NSLocalizedString(@"Lift:", @"Lift:"); 
NSString *calisthenicLabel = NSLocalizedString(@"Calisthenic:", @"Calisthenic:"); 
NSString *cardioLabel = NSLocalizedString(@"Cardio:", @"Cardio:"); 
NSString *metricsLabel = NSLocalizedString(@"Metrics:", @"Metrics:"); 
NSString *commentLabel = NSLocalizedString(@"Comment:", @"Comment"); 
NSString *setLabel = NSLocalizedString(@"Set:", @"Set:"); 
NSString *repsLabel = NSLocalizedString(@"Reps:", @"Reps:"); 
NSString *weightLabel = NSLocalizedString(@"Weight:", @"Weight:"); 

//Cardio Labels 
NSString *timeLabel = NSLocalizedString(@"Time:", @"Time:"); 
NSString *distanceLabel = NSLocalizedString(@"Distance:", @"Distance:"); 
NSString *rateLabel = NSLocalizedString(@"Rate:", @"Rate:"); 
NSString *settingOneLabel = NSLocalizedString(@"Setting 1:", @"Setting 1:"); 
NSString *settingOneValueLabel = NSLocalizedString(@"Setting 1 Value:", @"Setting 1 Value:"); 
NSString *settingTwoLabel = NSLocalizedString(@"Setting 2:", @"Setting 2:"); 
NSString *settingTwoValueLabel = NSLocalizedString(@"Setting 2 Value:", @"Setting 2 Value:"); 
NSString *caloriesLabel = NSLocalizedString(@"Calories:", @"Calories:"); 

//Metrics Labels 
NSString *heightLabel = NSLocalizedString(@"Height:", @"Height:"); 
NSString *neckLabel = NSLocalizedString(@"Neck:", @"Neck:"); 
NSString *chestLabel = NSLocalizedString(@"Chest:", @"Chest:"); 
NSString *waistLabel = NSLocalizedString(@"Waist:", @"Waist:"); 
NSString *hipsLabel = NSLocalizedString(@"Hips:", @"Hips:"); 
NSString *bicepsLabel = NSLocalizedString(@"Biceps:", @"Biceps:"); 
NSString *ForearmsLabel = NSLocalizedString(@"Forearms:", @"Forearms:"); 
NSString *wristsLabel = NSLocalizedString(@"Wrists:", @"Wrists:"); 
NSString *quadsLabel = NSLocalizedString(@"Quads/Thighs:", @"Quads/Thighs:"); 
NSString *calvesLabel = NSLocalizedString(@"Calves:", @"Calves:"); 
NSString *anlklesLabel = NSLocalizedString(@"Ankles:", @"Ankles:"); 
NSString *feetLabel = NSLocalizedString(@"Feet:", @"Feet:"); 
NSString *bmiLabel = NSLocalizedString(@"BMI:", @"BMI:"); 
NSString *bmrLabel = NSLocalizedString(@"BMR:", @"BMR:"); 
NSString *waistHeightLabel = NSLocalizedString(@"Waist/Height:", @"Waist/Height:"); 
NSString *waistHipsLabel = NSLocalizedString(@"Waist/Hips:", @"Waist/Hips:"); 
// English 
NSString *lbLabel = NSLocalizedString(@"lb", @"lb"); 
NSString *mLabel = NSLocalizedString(@"m", @"m"); 
NSString *mphLabel = NSLocalizedString(@"mph", @"mph"); 
NSString *inchLabel = NSLocalizedString(@"in", @"in"); 


// Metric 
NSString *kgLabel = NSLocalizedString(@"kg", @"kg"); 
NSString *kLabel = NSLocalizedString(@"k", @"k"); 
NSString *kphLabel = NSLocalizedString(@"kp/h", @"kp/h"); 
NSString *cmLabel = NSLocalizedString(@"cm", @"cm"); 


//Both 
NSString *liftLabel = NSLocalizedString(@"Lift:", @"Lift:"); 
NSString *calisthenicLabel = NSLocalizedString(@"Calisthenic:", @"Calisthenic:"); 
NSString *cardioLabel = NSLocalizedString(@"Cardio:", @"Cardio:"); 
NSString *metricsLabel = NSLocalizedString(@"Metrics:", @"Metrics:"); 
NSString *commentLabel = NSLocalizedString(@"Comment:", @"Comment"); 
NSString *setLabel = NSLocalizedString(@"Set:", @"Set:"); 
NSString *repsLabel = NSLocalizedString(@"Reps:", @"Reps:"); 
NSString *weightLabel = NSLocalizedString(@"Weight:", @"Weight:"); 

//Cardio Labels 
NSString *timeLabel = NSLocalizedString(@"Time:", @"Time:"); 
NSString *distanceLabel = NSLocalizedString(@"Distance:", @"Distance:"); 
NSString *rateLabel = NSLocalizedString(@"Rate:", @"Rate:"); 
NSString *settingOneLabel = NSLocalizedString(@"Setting 1:", @"Setting 1:"); 
NSString *settingOneValueLabel = NSLocalizedString(@"Setting 1 Value:", @"Setting 1 Value:"); 
NSString *settingTwoLabel = NSLocalizedString(@"Setting 2:", @"Setting 2:"); 
NSString *settingTwoValueLabel = NSLocalizedString(@"Setting 2 Value:", @"Setting 2 Value:"); 
NSString *caloriesLabel = NSLocalizedString(@"Calories:", @"Calories:"); 

//Metrics Labels 
NSString *heightLabel = NSLocalizedString(@"Height:", @"Height:"); 
NSString *neckLabel = NSLocalizedString(@"Neck:", @"Neck:"); 
NSString *chestLabel = NSLocalizedString(@"Chest:", @"Chest:"); 
NSString *waistLabel = NSLocalizedString(@"Waist:", @"Waist:"); 
NSString *hipsLabel = NSLocalizedString(@"Hips:", @"Hips:"); 
NSString *bicepsLabel = NSLocalizedString(@"Biceps:", @"Biceps:"); 
NSString *ForearmsLabel = NSLocalizedString(@"Forearms:", @"Forearms:"); 
NSString *wristsLabel = NSLocalizedString(@"Wrists:", @"Wrists:"); 
NSString *quadsLabel = NSLocalizedString(@"Quads/Thighs:", @"Quads/Thighs:"); 
NSString *calvesLabel = NSLocalizedString(@"Calves:", @"Calves:"); 
NSString *anlklesLabel = NSLocalizedString(@"Ankles:", @"Ankles:"); 
NSString *feetLabel = NSLocalizedString(@"Feet:", @"Feet:"); 
NSString *bmiLabel = NSLocalizedString(@"BMI:", @"BMI:"); 
NSString *bmrLabel = NSLocalizedString(@"BMR:", @"BMR:"); 
NSString *waistHeightLabel = NSLocalizedString(@"Waist/Height:", @"Waist/Height:"); 
NSString *waistHipsLabel = NSLocalizedString(@"Waist/Hips:", @"Waist/Hips:"); 
+0

Любопытно, почему вы используете эту настройку. Почему бы просто не использовать 'NSLocalizedString (@" timeLabel ", @" метку времени ")' везде, например? – nielsbot

+0

Привет, nielsbot, если вы просто ссылаетесь на мое соглашение об именах в строках. Хорошо, если это неправильно, вероятно, только потому, что я не знаю ничего лучше, и я ноб :). Я никогда не полностью локализовал продукт раньше и просто использовал это соглашение повсюду, поэтому, если/когда я пойду на локализацию, я буду выглядеть плохо в лучшей форме. Любой вход или совет всегда приветствуются. Cheers – Narsil

+0

Ну, я думаю, вы можете просто использовать 'NSLocalizedString()' везде, где вам нужна локализованная строка. Проблема в том, как вы убедитесь, что ваша ключевая строка согласована. Вы можете сделать все возможное, или вы можете использовать макросы или постоянные строки. Отъезд http://stackoverflow.com/a/10196327/210171 – nielsbot

ответ

1

Если они не должны быть доступны за пределами класса, вам не нужно делать их свойствами, а также вы не должны называть себя. [НИЧЕГО] внутри вашего класса, вы должны использовать _ [ variableName] для доступа к ivars.

Таким образом, лучший способ сделать это - сделать то, что вы сделали, но сделать их частными ivars.

@interface CLASSNAME() 
{ 
    // English 
    NSString *_lbLabel = NSLocalizedString(@"lb", @"lb"); 
    NSString *_mLabel = NSLocalizedString(@"m", @"m"); 
    NSString *_mphLabel = NSLocalizedString(@"mph", @"mph"); 
    NSString *_inchLabel = NSLocalizedString(@"in", @"in"); 
    ... 
} 

@end 

ли выше в .m файл вашего класса, и эти переменные будут доступны через класс, но не внешне. Если вы когда-нибудь решите, что хотите, чтобы они были внешними, вы просто делаете их @properties и потому что вы использовали соглашение об именах _ [VARNAME], которое вы уже настроили для их использования, иначе имя не изменится, потому что @properties автоматически синхронизированы для вас и вы должны получить доступ к ним со своим именем ivar, а не с самим собой. [VARNAME]. Чтобы прокомментировать решение словаря, да, если вы хотите передать все строки сразу, удерживая их в контейнере, это будет лучший способ пойти, но если вы обращаетесь к ним по отдельности, помещая их внутри контейнера, это излишне и ненужно, проще просто получить доступ к ним напрямую, и это быстрее.

+1

Большое спасибо за это и подробно остановимся на том, где и почему я должен размещать их так, как вы заявили, что это очень полезно, как новый парень, вероятно, поможет мне очистить часть моего другого кода, где у меня есть свойства, которые должны 't свойства и так далее. Еще раз спасибо! – Narsil

1

Единственный способ, которым я мог думать, сделать это проще, чтобы использовать словарь и вместо того, чтобы делать

NSString *liftLabel = NSLocalizedString(@"Lift:", @"Lift:"); 

вы делаете это

NSDictionary* dictionaryOfStrings = [[NSDictionary alloc] init]; 

затем в методе файл сделать

NSMutableDictionary* mutableDictionary = [Dictionary dictionaryWithDictionary:self.dictionaryOfStrings]; 
[mutableDictionary setObject:NSLocalizedString(@"Lift:", @"Lift:") forKey:@"lift"]; 
self.dictionaryOfStrings = [NSDictionary dictionaryWithDictionary:mutablDictionary]; 

рассуждения этого заключается в том, что все строковые данные будут сохранены с в словаре и не имеют 20 различных деклараций струнные так что это упрощает файл заголовка, и все свойства доступны с 1 объект словарь.

Далее мы определяем его как обычный NSDictionary не NSMutableDictionary. Mutable означает, что его можно изменить, но мне лично не нравятся объекты, которые я просматриваю, чтобы их можно было манипулировать так легко, поэтому я конвертирую nonMutable obejcts в mutable, а затем обратно в non mutable, это гарантирует, что объекты в массив может обрабатываться только там, где я конвертирую его взад и вперед.

Этот путь является моим преимуществом и не более правильным способом, чем другая практика проектирования, но я предпочитаю этот метод по сравнению со многими строковыми переменными.

+0

Спасибо за это, с вашим вводом и подходом apperley ниже, я думаю, должно быть хорошо идти! Cheers – Narsil

Смежные вопросы