ios - Swift: Divide una cadena en una matriz




15 Answers

Simplemente llame al método componentsSeparatedByString en su fullName

import Foundation

var fullName: String = "First Last"
let fullNameArr = fullName.componentsSeparatedByString(" ")

var firstName: String = fullNameArr[0]
var lastName: String = fullNameArr[1]

Actualización para Swift 3+

import Foundation

let fullName    = "First Last"
let fullNameArr = fullName.components(separatedBy: " ")

let name    = fullNameArr[0]
let surname = fullNameArr[1]
ios string swift split

Digamos que tengo una cuerda aquí:

var fullName: String = "First Last"

Quiero dividir la base de la cadena en el espacio en blanco y asignar los valores a sus respectivas variables

var fullNameArr = // something like: fullName.explode(" ") 

var firstName: String = fullNameArr[0]
var lastName: String? = fullnameArr[1]

Además, a veces los usuarios pueden no tener un apellido.




Swift Dev. 4.0 (24 de mayo de 2017)

Una nueva función split en Swift 4 ( Beta ).

import Foundation
let sayHello = "Hello Swift 4 2017";
let result = sayHello.split(separator: " ")
print(result)

Salida:

["Hello", "Swift", "4", "2017"]

Valores de acceso:

print(result[0]) // Hello
print(result[1]) // Swift
print(result[2]) // 4
print(result[3]) // 2017

Xcode 8.1 / Swift 3.0.1

Esta es la forma de múltiples delimitadores con matriz.

import Foundation
let mathString: String = "12-37*2/5"
let numbers = mathString.components(separatedBy: ["-", "*", "/"])
print(numbers)

Salida:

["12", "37", "2", "5"]



Swift 4

let words = "these words will be elements in an array".components(separatedBy: " ")



El tema del espacio en blanco.

En general, las personas reinventan este problema y las malas soluciones una y otra vez. ¿Es este un espacio? "" y qué pasa con "\ n", "\ t" o algún carácter de espacio en blanco Unicode que nunca has visto, en gran parte porque es invisible. Mientras que usted puede salirse con la suya

Una solución débil

import Foundation
let pieces = "Mary had little lamb".componentsSeparatedByString(" ")

Si alguna vez necesitas agitarte con la realidad, mira un video de la WWDC en cadenas o fechas. En resumen, casi siempre es mejor permitir que Apple resuelva este tipo de tarea mundana.

Solución robusta: utilizar NSCharacterSet

La manera de hacerlo correctamente, en mi humilde opinión, es usar NSCharacterSet ya que como se indicó anteriormente, su espacio en blanco podría no ser lo que usted espera y Apple ha proporcionado un conjunto de caracteres de espacio en blanco. Para explorar los diversos conjuntos de caracteres proporcionados, consulte la documentación para desarrolladores de NSCharacterSet de Apple y luego, solo entonces, aumente o construya un nuevo conjunto de caracteres si no se ajusta a sus necesidades.

NSCharacterSet espacios en blanco

Devuelve un conjunto de caracteres que contiene los caracteres de la Categoría General Unicode y la TABULACIÓN DE PERSONAJES (U + 0009).

let longerString: String = "This is a test of the character set splitting system"
let components = longerString.components(separatedBy: .whitespaces)
print(components)



Swift 3

let line = "AAA    BBB\t CCC"
let fields = line.components(separatedBy: .whitespaces).filter {!$0.isEmpty}
  • Devuelve tres cadenas AAA , BBB y CCC
  • Filtra los campos vacíos
  • Maneja múltiples espacios y caracteres de tabulación.
  • Si desea manejar nuevas líneas, reemplace .whitespaces con .whitespacesAndNewlines



Encontré un caso interesante, que

Método 1

var data:[String] = split( featureData ) { $0 == "\u{003B}" }

Cuando usé este comando para dividir algún símbolo de los datos que se cargaron desde el servidor , se puede dividir mientras se prueba en el simulador y se sincroniza con el dispositivo de prueba, pero no se dividirá en la aplicación de publicación, y Ad Hoc

Me lleva mucho tiempo rastrear este error. Puede que haya sido maldecido por alguna versión Swift, una versión iOS o ninguna.

Tampoco se trata del código HTML, ya que intento stringByRemovingPercentEncoding y todavía no funciona

Además 10/10/2015

en Swift 2.0 este método ha sido cambiado a

var data:[String] = featureData.split {$0 == "\u{003B}"}

método 2

var data:[String] = featureData.componentsSeparatedByString("\u{003B}")

Cuando usé este comando, puede dividir los mismos datos que se cargan desde el servidor correctamente

Conclusión, realmente sugiero utilizar el método 2.

string.componentsSeparatedByString("")



Actualización de Swift 4, Xcode 10 e iOS 12 100% funcionando

let fullName = "First Last"    
let fullNameArr = fullName.components(separatedBy: " ")
let firstName = fullNameArr[0] //First
let lastName = fullnameArr[1] //Last

Consulte la documentación de Apple aquí para obtener más información.




O sin cierres puedes hacer esto en Swift 2:

let fullName = "First Last"
let fullNameArr = fullName.characters.split(" ")
let firstName = String(fullNameArr[0])



Espero que esto sea útil

Swift 4: Divide una cadena en una matriz. Paso 1: asignar cadena. paso 2: basado en @ spliting. Nota: variableName.components (separado por: "palabra clave dividida")

let fullName: String = "First Last @ triggerd event of the session by session storage @ it can be divided by the event of the trigger."
let fullNameArr = fullName.components(separatedBy: "@")
print("split", fullNameArr)



Swift 2.2 Error Handling & capitalizedString Añadido:

func setFullName(fullName: String) {
    var fullNameComponents = fullName.componentsSeparatedByString(" ")

    self.fname = fullNameComponents.count > 0 ? fullNameComponents[0]: ""
    self.sname = fullNameComponents.count > 1 ? fullNameComponents[1]: ""

    self.fname = self.fname!.capitalizedString
    self.sname = self.sname!.capitalizedString
}



Esto ha cambiado de nuevo en Beta 5. Weee! Ahora es un método en CollectionType

Antiguo:

var fullName = "First Last"
var fullNameArr = split(fullName) {$0 == " "}

Nuevo:

var fullName = "First Last"
var fullNameArr = fullName.split {$0 == " "}

Notas de lanzamiento de manzanas




Según Swift 2.2

Solo escribe el código de 2 líneas y obtendrás la cadena dividida.

let fullName = "FirstName LastName"
var splitedFullName = fullName.componentsSeparatedByString(" ")
print(splitedFullName[0])
print(splitedFullName[1]) 

Disfrutar. :)




El manejo de cuerdas sigue siendo un desafío en Swift y sigue cambiando significativamente, como puede ver en otras respuestas. Esperemos que las cosas se calmen y se vuelvan más simples. Esta es la forma de hacerlo con la versión 3.0 actual de Swift con varios caracteres separadores.

Swift 3:

let chars = CharacterSet(charactersIn: ".,; -")
let split = phrase.components(separatedBy: chars)

// Or if the enums do what you want, these are preferred. 
let chars2 = CharacterSet.alphaNumerics // .whitespaces, .punctuation, .capitalizedLetters etc
let split2 = phrase.components(separatedBy: chars2)



Estaba buscando una división débil , como la explode de PHP donde se incluyen secuencias vacías en la matriz resultante, esto funcionó para mí:

"First ".split(separator: " ", maxSplits: 1, omittingEmptySubsequences: false)

Salida:

["First", ""]



var fullName = "James Keagan Michael"
let first = fullName.components(separatedBy: " ").first?.isEmpty == false ? fullName.components(separatedBy: " ").first! : "John"
let last =  fullName.components(separatedBy: " ").last?.isEmpty == false && fullName.components(separatedBy: " ").last != fullName.components(separatedBy: " ").first ? fullName.components(separatedBy: " ").last! : "Doe"
  • No permitir el mismo nombre y apellido
  • Si un nombre completo no es válido, tome el valor de marcador de posición "John Doe"



Related