Есть ли stringByAppendingString:
в Objective-C какие-либо сочетания клавиш ( ) для конкатенации строк или NSString
вообще для работы с ними ?
Например, я хотел бы сделать:
NSString *myString = @"This";
NSString *test = [myString stringByAppendingString:@" is just a test"];
что-то вроде:
string myString = "This";
string test = myString + " is just a test";
objective-c
nsstring
string-concatenation
typeoneerror
источник
источник
Ответы:
Я могу придумать два ответа ... ни один из них не настолько приятен, как просто наличие оператора конкатенации.
Во-первых, используйте метод
NSMutableString
, который имеетappendString
метод, устраняющий необходимость в дополнительных временных строках.Во-вторых, используйте
NSArray
конкатенацию черезcomponentsJoinedByString
метод.источник
[NSMutableString appendString]
больше памяти, чем[NSString stringByAppendingStrings]
.[NSString stringWithFormat:@"%@/%@/%@", three, two, one];
Техника кажется самой элегантной. Это должен быть выбранный ответ.Опция:
Другой вариант:
Я предполагаю, что вы не довольны несколькими добавлениями (a + b + c + d), и в этом случае вы можете сделать:
используя что-то вроде
источник
Если у вас есть 2 литерала NSString , вы также можете просто сделать это:
Это также полезно для присоединения к #defines:
Наслаждаться.
источник
@
s в строках после первого.@"I" " really" " enjoy"...
NSString* const SQL_CREATE_TABLE_str = @"CREATE TABLE IF NOT EXISTS " TABLE_NAME @" (...);";
не работает? У меняExpected '@' in program
ошибка :(TABLE_NAME
определяется?Я продолжаю возвращаться к этому посту и всегда заканчиваю перебирать ответы, чтобы найти это простое решение, которое работает с таким количеством переменных, сколько необходимо:
Например:
источник
Создать метод:
Затем в любой функции, в которой вы нуждаетесь, установите строку или текстовое поле или что-либо еще в качестве возвращаемого значения этой функции.
Или, чтобы сделать ярлык, преобразуйте строку NSString в строку C ++ и используйте там «+».
источник
Ну, так как двоеточие является своего рода специальным символом, но является частью сигнатуры метода, можно добавить
NSString
категорию with, чтобы добавить этот неидиоматический стиль конкатенации строк:Вы можете определить столько аргументов, разделенных двоеточиями, сколько считаете полезным ... ;-)
Для хорошей меры я также добавил
concat:
переменные аргументы, которые принимаютnil
завершенный список строк.источник
stringWithFormat:
. Не говоря уже об отсутствии именованных параметров, что не только нестандартно, но и сбивает с толку.stringByAppendingString
, и он никогда не говорил ничего об использовании более двух аргументов. Мне нравится этот ответ лучше, чем принятый. Это довольно умно.Используйте
stringByAppendingString:
этот способ:ИЛИ
источник
Macro:
Тестовые случаи:
Альтернативный макрос: (если вы хотите ввести минимальное количество аргументов)
источник
-[NSString stringByAppendingString:]
для этого варианта использования - с первым вы получите исключение, если аргумент есть,nil
но не если получатель есть. Таким образом, вероятно, 50% вероятности ошибки в вашем устройстве подачи строки молча и 50% на исключение. СstringConcat
вами гарантировано исключение в любомnil
, в любом месте списка. Что, по крайней мере, более предсказуемо.При создании запросов для веб-сервисов, я считаю, что сделать что-то вроде следующего очень легко и делает сцепление читаемым в XCode:
источник
Ярлык путем создания макроса AppendString (AS) ...
Замечания:
Если вы используете макрос, конечно, просто делайте это с переменными аргументами, смотрите ответ EthanB.
источник
источник
Вот простой способ, используя новый синтаксис массива:
источник
После пары лет работы с Objective C я думаю, что это лучший способ работать с Objective C, чтобы достичь того, чего вы пытаетесь достичь.
Начните вводить «N» в приложении Xcode, и оно автоматически заполняется до «NSString». введите "str" и он автоматически завершится до "stringByAppendingString". Таким образом, нажатия клавиш довольно ограничены.
Как только вы научитесь нажимать клавишу «@» и вкладывать процесс написания читаемого кода, больше не станет проблемой. Это просто вопрос адаптации.
источник
Единственный способ сделать
c = [a stringByAppendingString: b]
короче - это использовать автозаполнение вst
точке.+
Оператор является частью С, который не знает об объектах , Objective-C.источник
#define
можно использовать, чтобы сократить его.Как насчет сокращения
stringByAppendingString
и использования #define :Таким образом вы бы использовали:
Проблема в том, что он работает только для двух строк, вам необходимо заключить дополнительные скобки в дополнительные добавления:
источник
источник
источник
Я попробовал этот код. это работает для меня.
источник
appendString:
если вы используетеNSMutableString
.Пытался следующее в
lldb
панеликакие ошибки.
вместо этого используйте alloc и
initWithFormat
метод:источник
Это для лучшей регистрации, и только регистрации - на основе отличного метода множественных аргументов dicius. Я определяю класс Logger и называю его так:
Почти хорошо, за исключением необходимости заканчивать аргументы var "nil", но я полагаю, что в Objective-C этого нет.
logger.h
Logger.m
Чтобы только конкатировать строки, я бы определил категорию для NSString и добавил к ней статический (+) метод конкатенации, который выглядит точно так же, как метод log выше, за исключением того, что он возвращает строку. Он находится на NSString, потому что это строковый метод, и он статический, потому что вы хотите создать новую строку из 1-N строк, а не вызывать ее ни для одной из строк, являющихся частью добавления.
источник
источник
Попробуйте stringWithFormat:
источник
При работе со строками часто мне проще создать исходный файл ObjC ++, затем я могу объединить std :: strings, используя второй метод, показанный в вопросе.
источник
Мой предпочтительный метод заключается в следующем:
Вы можете достичь этого, добавив метод соединения к NSArray с категорией:
@[]
это краткое определениеNSArray
, я думаю, что это самый быстрый способ объединения строк.Если вы не хотите использовать категорию, используйте непосредственно
componentsJoinedByString:
метод:источник
Вы можете использовать NSArray как
или
ты можешь использовать
источник
Любой из этих форматов работает в XCode7, когда я тестировал:
По какой-то причине вам нужен только символ оператора @ в первой строке микса.
Однако, это не работает с вставкой переменной. Для этого вы можете использовать это чрезвычайно простое решение, за исключением использования макроса «cat» вместо «and».
источник
Для всех любителей Objective C, которые нуждаются в этом в UI-Test:
источник
источник
Давайте представим, что вы не знаете, сколько там строк.
источник