2015-08-19 3 views
0

Пример 1:Как эффективно писать подобные коды в xcode?

- (NSString *)userToken 
{ 
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    return [userDefaults objectForKey:@"userToken"]; 
} 

- (void)setUserToken:(NSString *)userToken 
{ 
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    [userDefaults setObject:userToken forKey:@"userToken"]; 
} 

- (NSString *)userName 
{ 
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    return [userDefaults objectForKey:@"userName"]; 
} 

- (void)setUserName:(NSString *)userName 
{ 
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    [userDefaults setObject:userName forKey:@"userName"]; 
    [userDefaults synchronize]; 
} 

Эти методы получения и установки очень похожи. Есть ли умный «макрос», который может помочь мне упростить коды? Так что я буду иметь возможность написать несколько кодов для каждого свойства, как это:

XXXX(userToken) 
XXXX(userName) 

Пример 2:

+ (MyManager *)sharedManager { 
    // singleton 
    ... 
} 

- (void)updateName:(NSString *)name { 
    self.name = name; 
} 

+ (void)updateName:(NSString *)name { 
    return [[self sharedManager] updateName:name]; 
} 

- (void)updateUid:(NSString *)uid { 
    self.uid = uid; 
} 

+ (void)updateUid:(NSString *)uid { 
    return [[self sharedManager] updateUid:uid]; 
} 

Я хочу способ эффективно писать их тоже.

Что я могу сделать?

+2

Что вы попробовали? Что пошло не так? – Wain

+0

@Wain Например, 1, я попытался использовать макрос. Но макрос не может автоматически заполнить первую букву. Поэтому мне приходится писать макросы: XXXX (имя пользователя, имя_пользователя) Например, 2, я понятия не имею. –

ответ

0

Решение, которое я вижу здесь может быть такой:

  1. Создайте перечисление, содержащее список того, что может быть обновлен
  2. Создайте метод, который принимает два атрибута: одно имя атрибута, который требуется обновить (который будет значением перечисления) и новое значение
  3. с помощью переключателя оператора реализации обновленного метода (матч перечислений в строки, которые являются ключами для дефолтов пользователя

Это г VES вы возможность уменьшить количество методов и кода, вам нужно иметь, чтобы сделать так, как каждый метод делать почти точно такой же только ключевые изменения для менеджера дефолтов пользователя

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

-(void)updateAttribute:(EnumType)attribute withNewValue:(NSString *)newValue; 

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

+0

Что делать, если вам нужны специальные проверки и действия для разных атрибутов? Вам все равно нужно писать повторяющиеся части кода. – gbuzogany

+0

если бы было, но в случае, если он показал, что нет. Кроме того, при переключении для разных параметров вы можете добавить столько проверок, сколько захотите. еще яснее :) –

+0

Другая проблема заключается в том, что некоторые значения не являются типом NSString. Поэтому мне нужно больше публичных методов для float, int и bool. Тогда я не могу поместить все ключи атрибутов в одно перечисление. Есть ли у вас какие-либо идеи? –

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