¿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.


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.


@ 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.


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

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"

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.


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

9

Muy simple:

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

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")

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

¿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.


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)"

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

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"

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)

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


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!)

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.