La interpolación embebe cualquier expresión Swift dentro de una cadena con (...):
let nombre = "Swift"
let version = 5.9
print("(nombre) (version)") // Swift 5.9
print("2 + 2 = (2 + 2)") // 2 + 2 = 4
print("(nombre.uppercased())!") // SWIFT!
// Formateo con String(format:)
let precio = 9.5
print(String(format: "Precio: %.2f EUR", precio)) // Precio: 9.50 EUR
Cadenas multilínea y raw strings
// Multilínea: comienza en la línea siguiente a las triple comillas
let json = """
{
"nombre": "Ana",
"edad": 30
}
"""
// Raw string: las barras invertidas son literales
let ruta = #"C:\Users\Ana\Docs"#
let regex = #"\d{4}-\d{2}-\d{2}"#
Por qué no existen índices numéricos
Un Character en Swift puede ocupar entre 1 y varios scalares Unicode (emojis, grafemas compuestos como é = e + acento combinador). Por eso no existe str[3]; se usa String.Index:
let s = "Cafeu{301}" // Café con acento combinado
print(s.count) // 4, no 5
let idx = s.index(s.startIndex, offsetBy: 2)
print(s[idx]) // f
for c in "Hello " {
print(c, terminator: "")
}
// H e l l o (emoji)
Métodos más usados
let texto = " Hola, Mundo "
print(texto.trimmingCharacters(in: .whitespaces)) // "Hola, Mundo"
print("swift".capitalized) // Swift
print("abc".hasPrefix("ab")) // true
print("abc".hasSuffix("bc")) // true
let partes = "a,b,c".split(separator: ",")
print(partes) // ["a", "b", "c"]
print("programacion.net".contains("net")) // true
print("Swift 5".replacingOccurrences(of: "5", with: "6")) // Swift 6
Strings como Comparable
let a = "apple", b = "banana"
print(a < b) // true (orden lexicográfico Unicode)
let palabras = ["naranja", "manzana", "pera"]
print(palabras.sorted()) // ["manzana", "naranja", "pera"]
