2013-10-05 37 views
0

我希望這個相當直接的問題。我有我在課堂上使用的所有字符串。這些字符串會與其他數據一起附加到單個字符串以創建可讀的輸出字符串。iOS類,實現多個字符串的正確方法?

目前我有一個方法,我只是初始化所有的字符串完全列在方法本身的底部。我打算在類中使用多個其他方法來使用這些相同的字符串,所以我的問題是......簡單地使它們全部屬性並初始化它們,以便它們可以在整個類中使用,如下例所示(i不知道工作代碼)。還是有更好的辦法,我應該這樣做,我知道它會按我的建議工作,但作爲一個新手,我希望在某個時候學習正確的做事方式。提前喝酒幫忙。

@interface

@property(強,非原子)的NSString * LBLABEL;

... .. .. ..for每一個.. @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」,@「time label」)'例如? – nielsbot

+0

嗨,nielsbot,如果你只是指在我的命名約定內的字符串..老實說,如果它錯了可能只是因爲我不知道任何更好的,我是一個noob :)。我以前從未完全本地化過產品,並且隨處都在使用這個規範,所以如果/當我去本地化時,我會生病得更好。任何意見或建議總是讚賞。乾杯 – Narsil

+0

嗯,我想你可以在需要本地化字符串的地方使用'NSLocalizedString()'。問題變成了,你如何確保你的密鑰字符串是一致的。你可以盡力而爲,或者你可以使用宏或常量字符串。退房http://stackoverflow.com/a/10196327/210171 – nielsbot

回答

1

如果這些不應該在課堂外訪問,你不需要讓它們屬性,以及你不應該調用self。[ANYTHING]在你的課堂內,你應該使用_ [ 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

非常感謝你的這一點,並詳細說明我應該把它們放在哪裏以及爲什麼,因爲你說過這對新人非常有幫助,可能會幫助我清理一些其他代碼,以及我應該具有的屬性不是物業等等。再次感謝! – Narsil

1

我能想到的使這個simplier的唯一方法,就是用字典和而不是做

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。可變意味着它是可以改變的,但我個人不喜歡我繞過能夠這麼容易被操縱的對象,所以我轉換nonMutable obejcts以可變的,然後再返回到非可變的,這確保了對象數組只能在來回轉換的地方操作。

這種方式是我的偏好,不超過另一種設計實踐正確的方式,但我喜歡這種方法在具有很多字符串變量。

+0

感謝你的這一點,在你的和apperley的輸入下面我認爲應該很好去!乾杯 – Narsil

相關問題