Como concatenar seqüências de caracteres no Swift?


188

Como concatenar string no Swift?

Em Objective-Cnós gostamos

NSString *string = @"Swift";
NSString *resultStr = [string stringByAppendingString:@" is a new Programming Language"];

ou

NSString *resultStr=[NSString stringWithFormat:@"%@ is a new Programming Language",string];

Mas eu quero fazer isso na linguagem Swift.


1
O compilador Swift não pode compilar + muito bem. Se você tiver um par de + em uma frase, ela poderá falhar. Use ()
kelalaka

Respostas:


335

Você pode concatenar cadeias de várias maneiras:

let a = "Hello"
let b = "World"

let first = a + ", " + b
let second = "\(a), \(b)"

Você também pode fazer:

var c = "Hello"
c += ", World"

Tenho certeza de que existem outras maneiras também.

Bit de descrição

letcria uma constante. (mais ou menos como um NSString). Você não pode alterar seu valor depois de defini-lo. Você ainda pode adicioná-lo a outras coisas e criar novas variáveis.

varcria uma variável (mais ou menos como NSMutableString) para que você possa alterar o valor. Mas isso foi respondido várias vezes no Stack Overflow (veja a diferença entre let e var ).

Nota

Na realidade lete varsão muito diferentes de NSStringe NSMutableStringmas ajuda a analogia.


@ Rajneesh071 Por que isso daria um erro de tempo de compilação?
Fogmeister

letcria uma constante. (mais ou menos como um NSString). Você não pode alterar seu valor depois de defini-lo. Você ainda pode adicioná-lo a outras coisas e criar novas variáveis. varcrie uma variável (como NSMutableString), para que você possa alterar o valor dele. Mas isso foi respondido várias vezes no SO. Procuradifference between let and var
Fogmeister

deixe a = "Olá" deixe b = "Mundo" deixe primeiro = a + "," + b Não funciona, é isso que funciona, deixe primeiro = "(a), (b)". Você obterá um erro de tempo de execução com o primeiro método #
Joseph

1
@ Joseph funciona bem para mim. i.imgur.com/T15s4Sp.png Obrigado pelo voto para baixo though.
Fogeister #

@Fogmeister que versão do xCode você está usando? Não funciona em xCode 6.3 Beta, talvez o seu trabalho sobre a versão mais recente
Joseph

62

Você pode adicionar uma string das seguintes maneiras:

  • str += ""
  • str = str + ""
  • str = str + str2
  • str = "" + ""
  • str = "\(variable)"
  • str = str + "\(variable)"

Eu acho que nomeei todos eles.


31
var language = "Swift" 
var resultStr = "\(language) is a new programming language"

25
Como uma observação lateral, isso é chamado de interpolação de string, não concatenação.
dcastro

13

Isso também funcionará:

var string = "swift"
var resultStr = string + " is a new Programming Language"

11

\ isso está sendo usado para acrescentar uma string a outra.

var first = "Hi" 
var combineStr = "\(first) Start develop app for swift"

Você pode tentar isso também: - + palavra-chave.

 var first = "Hi" 
 var combineStr = "+(first) Start develop app for swift"

Experimente este código.


10
let the_string = "Swift"
let resultString = "\(the_string) is a new Programming Language"

9

Muito simples:

let StringA = "Hello"
let StringB = "World"
let ResultString = "\(StringA)\(StringB)"
println("Concatenated result = \(ResultString)")

OUlet ResultString = "\(StringA)\(StringB)"
Apr

Se estiver usando interpolação, o + não é necessário, como Aks mencionou. Se você preferir usar o +, remova a interpolação.
Raghu Teja

9

Agora você pode usar stringByAppendingString no Swift.

var string = "Swift"
var resultString = string.stringByAppendingString(" is new Programming Language")

5

O Xcode não aceitou seqüências de caracteres opcionais adicionadas com uma sequência normal. Eu escrevi estas extensões para resolver esse problema:

extension String {
    mutating func addString(str: String) {
        self = self + str
    }
}

Então você pode chamar assim:

var str1: String?
var str1 = "hi"
var str2 = " my name is"
str1.addString(str2)
println(str1) //hi my name is

No entanto, agora você também pode fazer algo assim:

var str1: String?
var str1 = "hi"
var str2 = " my name is"
str1! += str2

Qual parte? Você está familiarizado com as extensões?
Esqarrouth

Sim, eu queria saber o que é ganho com a conversão de '+' em 'addString ()'. Se bem me lembro, dessa maneira, também seria exibido um aviso em vez de um erro do compilador, se usado em variáveis ​​não mutáveis. Caso contrário, está ofuscando o que está acontecendo e, na IMO, nada é mais fácil / rápido de ler do que '+'. A verdade é que pode haver uma razão pela qual eu sou cego para e é por isso que eu estava pedindo por isso que desta forma é 'recomendado'
user3802077

Eu usei isso quando o xcode não aceitou adicionar uma string opcional com uma string normal. ele ainda não faz isso diretamente, mas agora funciona quando você força a desembrulhar a cadeia, portanto essa extensão é um atm inútil. eu vou apagar depois de ler este me deixou um comentário
Esqarrouth

Obrigado pela explicação :). Não tenho certeza do que é considerado melhor, mas, ao adicionar o contexto à sua resposta, ele teria um valor ainda mais difícil no momento, pois pode não ser tão útil quanto antes.
User3802077

4

É chamado como Interpolação de String. É uma maneira de criar novas strings com CONSTANTES, VARIÁVEIS, LITERAIS e EXPRESSÕES. por exemplo:

      let price = 3
      let staringValue = "The price of \(price) mangoes is equal to \(price*price) "

Além disso

let string1 = "anil"
let string2 = "gupta"
let fullName = string1 + string2  // fullName is equal to "anilgupta"
or 
let fullName = "\(string1)\(string2)" // fullName is equal to "anilgupta"

também significa concatenar valores de string.

Espero que isso ajude você.


3

Para imprimir a sequência combinada usando

Println("\(string1)\(string2)")

ou String3 armazena a saída da combinação de 2 strings

let strin3 = "\(string1)\(string2)"

3

Pode-se também usar stringByAppendingFormat no Swift.

var finalString : NSString = NSString(string: "Hello")
finalString = finalString.stringByAppendingFormat("%@", " World")
print(finalString) //Output:- Hello World
finalString = finalString.stringByAppendingFormat("%@", " Of People")
print(finalString) //Output:- Hello World Of People

2

Swift 4.2

Você também pode usar uma extensão:

extension Array where Element == String? {
    func compactConcate(separator: String) -> String {
        return self.compactMap { $0 }.filter { !$0.isEmpty }.joined(separator: separator)
    }
}

Usar:

label.text = [m.firstName, m.lastName].compactConcate(separator: " ")

Resultado:

"The Man"
"The"
"Man"

2

De: Matt Neuburg Livro "iOS 13 Fundamentos de programação com Swift". :

Para combinar (concatenar) duas cadeias, a abordagem mais simples é usar o operador + :

let s = "hello"
let s2 = " world"
let greeting = s + s2

Essa notação conveniente é possível porque o operador + está sobrecarregado: faz uma coisa quando os operandos são números (adição numérica) e outra quando os operandos são strings (concatenação). O operador + vem com um atalho de atribuição + = ; naturalmente, a variável no lado esquerdo deve ter sido declarada com var:

var s = "hello"
let s2 = " world"
s += s2

Como alternativa a + = , você pode chamar o método de instância append (_ :) :

var s = "hello"
let s2 = " world"
s.append(s2)

Outra maneira de concatenar strings é com o método join (separator :) . Você começa com uma matriz de seqüências de caracteres a serem concatenadas e entrega a sequência a ser inserida entre todas elas:

let s = "hello"
let s2 = "world"
let space = " "
let greeting = [s,s2].joined(separator:space)

1

Você pode usar o SwiftString ( https://github.com/amayne/SwiftString ) para fazer isso.

"".join(["string1", "string2", "string3"]) // "string1string2string"
" ".join(["hello", "world"]) // "hello world"

AVISO LEGAL: Eu escrevi esta extensão


1

Acabei de mudar de Objective-C para Swift (4) e acho que frequentemente uso:

let allWords = String(format:"%@ %@ %@",message.body!, message.subject!, message.senderName!)

0

No Swift 5, a Apple introduz Raw Strings usando # símbolos.

Exemplo:

print(#"My name is "XXX" and I'm "28"."#)
let name = "XXX"
print(#"My name is \#(name)."#)

o símbolo # é necessário após \. Um \ (nome) regular será interpretado como caracteres na sequência.


0

Swift 5

Você pode conseguir isso usando a appendingAPI. Isso retorna uma nova string criada anexando uma determinada string ao receptor.

Detalhes da API: aqui

Use :

var text = "Hello"
text = text.appending(" Namaste")

Resultado :

Hello
Hello Namaste
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.