iOS - как обрабатывать конкатенацию строк, когда значение может быть ноль?
Я делаю что-то вроде этого:
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSString *var1 = [standardUserDefaults objectForKey:@"obj1"];
NSString *var2 = [standardUserDefaults objectForKey:@"obj2"];
EmailUtil *email_obj = [[EmailUtil alloc] initWithSubject:@"Some subject" body:[[[@"This is var1: " stringByAppendingString: var1] stringByAppendingString:@" and var2: "] stringByAppendingString: var2]];
[email_obj send];
Где EmailUtil - это просто мой собственный служебный класс, который отправляет электронную почту. Этот код отлично работает, когда строки var1 и var2 не равны nil; однако, если они равны нулю, программа завершится сбоем. Каким было бы элегантное решение или хорошая практика, чтобы гарантировать, что электронное письмо будет отправлено без проблем, независимо от того, какие значения?
Спасибо!
2 ответа
Перед вашей строкой EmailUtil просто добавьте:
if(var1==nil) var1 = @"";
if(var2==nil) var2 = @"";
Это должно решить проблему по крайней мере.
Другой и, возможно, лучший способ сделать это - использовать строку NSString stringWithFormat. Вместо:
[[[@"This is var1: " stringByAppendingString: var1] stringByAppendingString:@" and var2: "] stringByAppendingString: var2]
Делать:
[NSString stringWithFormat:@"This is var1: %@ and var2: %@", var1,var2];
Я полагаю, что он скажет (ноль) для параметров ноль (не проверял это). Это, вероятно, чище, чем у меня, и ваш оригинальный код тоже.
Ссылка: формат строки
Я бы соблазнился создать NSUserDefaults
Категория с методом, который возвратил гарантированную строку, заменяя @"" на nil или, возможно, заданное вами значение по умолчанию. Это может быть излишним, если ваша единственная задача (когда-либо!) - две переменные, но это также может быть удобно для повторного использования.