Existem atalhos para stringByAppendingString:
concatenação de strings ( ) no Objective-C ou atalhos para trabalhar NSString
em geral?
Por exemplo, eu gostaria de fazer:
NSString *myString = @"This";
NSString *test = [myString stringByAppendingString:@" is just a test"];
algo mais como:
string myString = "This";
string test = myString + " is just a test";
objective-c
nsstring
string-concatenation
typeoneerror
fonte
fonte
Respostas:
Duas respostas em que consigo pensar ... nenhuma delas é tão agradável quanto ter apenas um operador de concatenação.
Primeiro, use an
NSMutableString
, que possui umappendString
método, removendo parte da necessidade de seqüências de caracteres extras de temperatura.Segundo, use um
NSArray
para concatenar através docomponentsJoinedByString
métodofonte
[NSMutableString appendString]
é mais amigável que a memória[NSString stringByAppendingStrings]
.[NSString stringWithFormat:@"%@/%@/%@", three, two, one];
técnica parece a mais elegante. Deve ser a resposta selecionada.Uma opção:
Outra opção:
Suponho que você não esteja satisfeito com vários anexos (a + b + c + d). Nesse caso, você pode fazer:
usando algo como
fonte
Se você possui 2 literais NSString , também pode fazer isso:
Isso também é útil para ingressar em #defines:
Aproveitar.
fonte
@
s nas cordas após o primeiro.@"I" " really" " enjoy"...
NSString* const SQL_CREATE_TABLE_str = @"CREATE TABLE IF NOT EXISTS " TABLE_NAME @" (...);";
não funciona? Estou tendoExpected '@' in program
erro :(TABLE_NAME
definido?Continuo retornando a este post e sempre acabo classificando as respostas para encontrar essa solução simples que funciona com quantas variáveis forem necessárias:
Por exemplo:
fonte
Crie um método:
Então, em qualquer função que você precisar, configure sua string ou campo de texto ou o valor de retorno dessa função.
Ou, para criar um atalho, converta o NSString em uma string C ++ e use o '+' lá.
fonte
Bem, como dois pontos é uma espécie de símbolo especial, mas faz parte da assinatura do método, é possível estender a
NSString
categoria with para adicionar esse estilo não-idiomático de concatenação de strings:Você pode definir quantos argumentos separados por dois pontos achar úteis ... ;-)
Para uma boa medida, também adicionei
concat:
argumentos variáveis que levam anil
lista terminada de strings.fonte
stringWithFormat:
. Sem mencionar a falta de parâmetros nomeados que não são apenas fora do padrão, mas também confusos.stringByAppendingString
e nunca disse nada sobre o uso de mais de dois argumentos. Eu gosto desta resposta melhor do que a aceita. É bem esperto.Use
stringByAppendingString:
desta maneira:OU
fonte
Macro:
Casos de teste:
Macro alternativa: (se você deseja impor um número mínimo de argumentos)
fonte
-[NSString stringByAppendingString:]
neste caso de uso - com o primeiro, você receberá uma exceção se o argumento for,nil
mas não se o receptor for. Portanto, é possível que haja 50% de chance de um erro no alimentador de cordas falhando silenciosamente e 50% em uma exceção. ComstringConcat
você, uma exceção garantida em qualquernil
lugar da lista. Que pelo menos é mais previsível.Ao criar solicitações de serviços da web, acho que fazer algo como o seguinte é muito fácil e torna a concatenação legível no Xcode:
fonte
Atalho criando a macro AppendString (AS) ...
Nota:
Se estiver usando uma macro, é claro que apenas faça isso com argumentos variados, veja a resposta do EthanB.
fonte
fonte
Aqui está uma maneira simples, usando a nova sintaxe literal da matriz:
fonte
Depois de alguns anos com o Objective CI, pense que esta é a melhor maneira de trabalhar com o Objective C para alcançar o que você está tentando alcançar.
Comece digitando "N" no seu aplicativo Xcode e ele será concluído automaticamente como "NSString". digite "str" e é preenchido automaticamente como "stringByAppendingString". Portanto, as teclas são bastante limitadas.
Depois de pressionar a tecla "@" e tabular o processo de escrever código legível, não se torna mais um problema. É apenas uma questão de adaptação.
fonte
A única maneira de
c = [a stringByAppendingString: b]
diminuir é usar o preenchimento automático em torno dost
ponto. O+
operador faz parte de C, que não conhece objetos Objective-C.fonte
#define
poderia ser usado para encurtá-lo.Que tal encurtar
stringByAppendingString
e usar um #define :Assim, você usaria:
O problema é que ele funciona apenas para duas cadeias, você precisa agrupar colchetes adicionais para mais anexos:
fonte
fonte
fonte
Eu tentei esse código. funcionou para mim.
fonte
appendString:
se você estiver usando umNSMutableString
.Estava tentando o seguinte no
lldb
painelquais erros.
em vez disso, use o
initWithFormat
método e a atribuição :fonte
Isso é para melhor registro e registro apenas - com base no excelente método de múltiplos argumentos da dicius. Eu defino uma classe Logger e chamo-a assim:
Quase bom, exceto ter que terminar os argumentos com "nil", mas suponho que não há como contornar isso no Objective-C.
Logger.h
Logger.m
Para concatear apenas as seqüências de caracteres, eu definiria uma categoria no NSString e adicionaria um método estático (+) concatenado a ele que se parece exatamente com o método de log acima, exceto que ele retorna a sequência. Está no NSString porque é um método de sequência e é estático porque você deseja criar uma nova sequência a partir de seqüências 1-N, não a chame em nenhuma das sequências que fazem parte do anexo.
fonte
fonte
Tente stringWithFormat:
fonte
Ao lidar com strings com frequência, acho mais fácil tornar o arquivo de origem ObjC ++, então posso concatenar std :: strings usando o segundo método mostrado na pergunta.
fonte
Meu método preferido é o seguinte:
Você pode conseguir isso adicionando o método join ao NSArray com uma categoria:
@[]
é a definição curta paraNSArray
, acho que esse é o método mais rápido para concatenar strings.Se você não quiser usar a categoria, use diretamente o
componentsJoinedByString:
método:fonte
Você pode usar o NSArray como
ou
você pode usar
fonte
Um desses formatos funciona no XCode7 quando eu testei:
Por alguma razão, você só precisa do caractere @ operator na primeira sequência do mix.
No entanto, ele não funciona com inserção de variável. Para isso, você pode usar esta solução extremamente simples, com a exceção de usar uma macro em "gato" em vez de "e".
fonte
Para todos os amantes de Objective C que precisam disso em um teste de interface do usuário:
fonte
fonte
Vamos imaginar que você não sabe quantas cordas lá.
fonte