Как объединить строку в Objective-C (iPhone)?[дубликат]
-
18-09-2019 - |
Вопрос
Возможный Дубликат:
Как мне объединить строки в Objective-C?
Во-первых, платформа - iPhone, и label.text изменяет отображаемую метку.Рассмотрим этот сценарий:
У меня есть массив целых чисел.И я хочу отобразить это на экране.
Вот мой взгляд на это:
-(IBAction) updateText: (id)sender {
int a[2];
a[0]=1;
a[1]=2;
a[2]=3;
for (int i=0; i<=10;i++)
label.text = [NSString stringByAppendingString: [NSString stringWithFormat: @"%i", a[i]]];
}
Как вы, наверное, можете видеть, я в полном замешательстве.Пожалуйста, пожалуйста, помогите мне: (
Решение
Попробуй это:
NSMutableString* theString = [NSMutableString string];
for (int i=0; i<=10;i++){
[theString appendString:[NSString stringWithFormat:@"%i ",i]];
}
label.text = theString;
Другие советы
Поскольку вы используете цикл, будьте несколько осторожны с решениями Тома и Бенджи.Каждый из них создает дополнительный автоматически выпущенный объект за итерацию.Для небольшого цикла это нормально, но если размер цикла неограничен или если строки большие, это может привести к очень большому скачку объема памяти и снижению производительности.В частности, на iPhone это именно тот цикл, который может привести к неожиданным проблемам с памятью из-за кратковременных скачков памяти.
Следующее решение имеет меньший объем памяти (оно также немного быстрее и требует меньше ввода).Обратите внимание на призыв к -appendFormat:
вместо того , чтобы -appendString
.Это позволяет избежать создания второй строки, которая будет выброшена.Помните, что в конце последней строки есть дополнительный пробел, от которого вы, возможно, захотите избавиться.Вы можете исправить это, либо обработав первую или последнюю итерацию по-разному, либо обрезав последний пробел после цикла.
NSMutableString* theString = [NSMutableString string];
for (int i=0; i<=10;i++){
[theString appendFormat:@"%i ",i];
}
label.text = theString;
Не забывай [NSArray componentsJoinedByString:]
.В этом случае у вас нет NSArray, но в обычных случаях, когда у вас есть, это, вероятно, лучший способ получить то, что вы ищете.
//NSArray *chunks
string = [chunks componentsJoinedByString: @","];
Другой метод без использования NSMutableString:
NSString* theString = @"";
for (int i=0; i<=10;i++){
theString = [theString stringByAppendingFormat:@"%i ",i];
}
label.text = theString;
Вот полная реализация (корректирующая ваши диапазоны):
-(IBAction) updateText: (id)sender {
int a[3];
a[0]=1;
a[1]=2;
a[2]=3;
NSString *str = @"";
for (int i=0; i<3;i++)
str = [str stringByAppendingFormat:@"%i ",i];
label.text = str;
}
Вы также могли бы сделать это следующим образом (напримересли вам нужен список, разделенный запятыми):
-(IBAction) updateText: (id)sender {
int a[3];
a[0]=1;
a[1]=2;
a[2]=3;
NSMutableArray *arr = [NSMutableArray arrayWithCapacity:3];
for (int i=0; i<3;i++)
[arr addObject:[NSString stringWithFormat:@"%i",i]];
label.text = [arr componentsJoinedByString:@", "];
}