¿Cómo concateno cadenas en Swift?

188

¿Cómo concatenar una cadena en Swift?

En Objective-Cnos gusta

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

o

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

Pero quiero hacer esto en lenguaje rápido.

Rajneesh071
fuente
1
El compilador Swift no puede compilar + muy bien. Si tiene un par de + en una oración, entonces puede fallar. Use ()
kelalaka

Respuestas:

335

Puede concatenar cadenas de varias maneras:

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

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

También puedes hacer:

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

Estoy seguro de que también hay más formas.

Poco de descripción

letcrea una constante (algo así como un NSString). No puede cambiar su valor una vez que lo haya configurado. Sin embargo, aún puede agregarlo a otras cosas y crear nuevas variables.

varcrea una variable (algo así como NSMutableString) para que pueda cambiar el valor de la misma. Pero esto ha sido respondido varias veces en Stack Overflow, (vea la diferencia entre let y var ).

Nota

En realidad lety varson muy diferentes de NSStringy NSMutableStringpero ayuda a la analogía.

Fogmeister
fuente
@ Rajneesh071 ¿Por qué daría un error de tiempo de compilación?
Fogmeister
letcrea una constante (algo así como un NSString). No puede cambiar su valor una vez que lo haya configurado. Sin embargo, aún puede agregarlo a otras cosas y crear nuevas variables. varcrear una variable (algo así como NSMutableString) para que pueda cambiar el valor de la misma. Pero esto ha sido respondido varias veces en SO. Buscadifference between let and var
Fogmeister
let a = "Hola" let b = "Mundo" let first = a + "," + b No funciona, esto es lo que funciona, let first = "(a), (b)". Obtendrá un error de tiempo de ejecución con el primer método
Joseph
1
@ Joseph funciona bien para mí. i.imgur.com/T15s4Sp.png Sin embargo, gracias por el voto negativo .
Fogmeister
@Fogmeister ¿qué versión de xCode estás usando? No funciona en xCode 6.3 Beta, tal vez funciona en la última versión
Joseph
62

Puede agregar una cadena de estas maneras:

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

Creo que los nombré a todos.

Arbitur
fuente
32
var language = "Swift" 
var resultStr = "\(language) is a new programming language"
yoeriboven
fuente
25
Como nota al margen, esto se llama interpolación de cadenas, no concatenación.
dcastro
13

Esto también funcionará:

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

\ esto se está utilizando para agregar una cadena a otra cadena.

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

Puede probar esto también: - + palabra clave.

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

Prueba este código.

Jitendra
fuente
10
let the_string = "Swift"
let resultString = "\(the_string) is a new Programming Language"
Bagvendt
fuente
9

Muy simple:

let StringA = "Hello"
let StringB = "World"
let ResultString = "\(StringA)\(StringB)"
println("Concatenated result = \(ResultString)")
Rajesh Loganathan
fuente
Olet ResultString = "\(StringA)\(StringB)"
Aks
Si se usa la interpolación, no se necesita el +, como lo ha mencionado Aks. Si prefiere usar el +, elimine la interpolación.
Raghu Teja
9

Ahora puede usar stringByAppendingString en Swift.

var string = "Swift"
var resultString = string.stringByAppendingString(" is new Programming Language")
Mark Moeykens
fuente
5

Xcode no aceptó cadenas opcionales agregadas con una cadena normal. Escribí estas extensiones para resolver ese problema:

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

Entonces puedes llamarlo así:

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

Sin embargo, ahora también podría hacer algo como esto:

var str1: String?
var str1 = "hi"
var str2 = " my name is"
str1! += str2
Esqarrouth
fuente
¿Qué parte? ¿Estás familiarizado con las extensiones?
Esqarrouth
Sí, me preguntaba qué se gana al convertir '+' en 'addString ()'. Si no recuerdo mal, esta forma también le daría una advertencia en lugar de un error del compilador si se usa en una variable no mutable. De lo contrario, ofusca lo que está sucediendo y, en mi opinión, nada es más fácil / rápido de leer que '+'. La verdad es que podría haber una razón por la que estoy ciego y es por eso que estaba preguntando por qué esta 'recomendación' de esta manera
user3802077
Usé esto cuando xcode no aceptó agregar una cadena opcional con una cadena normal. todavía no lo hace directamente, pero ahora funciona cuando fuerza desenvolver la cadena, por lo que esta extensión es un cajero inútil. lo
borraré
Gracias por la explicación :). No estoy seguro de qué se considera mejor, pero al agregar el contexto a su respuesta, tendría un valor aún más difícil en la actualidad.
user3802077
4

Se llama como interpolación de cadenas. Es una forma de crear NUEVA cadena con CONSTANTES, VARIABLES, LITERALES y EXPRESIONES. por ejemplo:

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

además

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"

también significa concatenar valores de cadena.

Espero que esto te ayude.

Anil Gupta
fuente
3

Para imprimir la cadena combinada usando

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

o String3 almacena la salida de la combinación de 2 cadenas

let strin3 = "\(string1)\(string2)"
Pvni
fuente
3

También se puede usar stringByAppendingFormat en 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
Pushpa Y
fuente
2

Swift 4.2

También puedes usar una extensión:

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

Utilizar:

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

Resultado:

"The Man"
"The"
"Man"
Nik Kov
fuente
2

De: Matt Neuburg Libro "Fundamentos de programación iOS 13 con Swift". :

Para combinar (concatenar) dos cadenas, el enfoque más simple es usar el operador + :

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

Esta conveniente notación es posible porque el operador + está sobrecargado: hace una cosa cuando los operandos son números (suma numérica) y otra cuando los operandos son cadenas (concatenación). El operador + viene con un atajo de asignación + = ; naturalmente, la variable en el lado izquierdo debe haberse declarado con var:

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

Como alternativa a + = , puede llamar al método de instancia append (_ :) :

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

Otra forma de concatenar cadenas es con el método unido (separador :) . Comienza con una serie de cadenas que se concatenan y le entrega la cadena que se insertará entre todas:

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

Puede usar SwiftString ( https://github.com/amayne/SwiftString ) para hacer esto.

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

DESCARGO DE RESPONSABILIDAD: escribí esta extensión

eurobrew
fuente
1

Acabo de cambiar de Objective-C a Swift (4), y encuentro que a menudo uso:

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

En Swift 5, Apple presenta Raw Strings usando # símbolos.

Ejemplo:

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

el símbolo # es necesario después de \. Un \ (nombre) regular se interpretará como caracteres en la cadena.

Yogendra Singh
fuente
0

Swift 5

Puedes lograrlo usando appendingAPI. Esto devuelve una nueva cadena hecha agregando una cadena dada al receptor.

Detalles de la API: aquí

Uso :

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

Resultado :

Hello
Hello Namaste
Vittal Pai
fuente