web-dev-qa-db-fra.com

Utilisation de la fonction split dans Swift 2

Disons que je veux diviser une chaîne par un espace vide. Cet extrait de code fonctionne correctement dans Swift 1.x. Il ne fonctionne pas dans Swift 2 dans Xcode 7 Beta 1.

var str = "Hello Bob"
var foo = split(str) {$0 == " "}

Je reçois l'erreur suivante du compilateur:

Cannot invoke 'split' with an argument list of type '(String, (_) -> _)

Quelqu'un sait comment appeler cela correctement?

Mise à jour: Ajout d'une note indiquant qu'il s'agissait du Xcode 7 beta 1.

70
Mallioch

split est une méthode dans une extension de CollectionType à laquelle, à compter de Swift 2, String ne correspond plus. _ heureusement, il en existe d'autres façons de diviser un String:

  1. Utilisez componentsSeparatedByString:

    "ab cd".componentsSeparatedByString(" ") // ["ab", "cd"]
    

    Comme l'a souligné @dawg, cela nécessite import Foundation.

  2. Au lieu d'appeler split sur un String, vous pouvez utiliser les caractères de String. La propriété characters renvoie un String.CharacterView Conforme à CollectionType:

    "???? ????????".characters.split(" ").map(String.init) // ["????", "????????"]
    
  3. Rendre String conforme à CollectionType:

    extension String : CollectionType {}
    
    "w,x,y,z".split(",") // ["w", "x", "y", "z"]
    

    Cependant, depuis Apple a pris la décision de supprimer la conformité de String à CollectionType, il semble plus judicieux de s'en tenir aux options une ou deux.


Dans Swift 3, dans les options 1 et 2 respectivement:

  • componentsSeparatedByString(:) a été renommé en components(separatedBy:).
  • split(:) a été renommé en split(separator:).
126
ABakerSmith

Swift 4

let str = "Hello Bob"
let strSplitArray = str.split(separator: " ")
strSplitArray.first!    // "Hello"
strSplitArray.last!     // "Bob"

Xcode 7.1.1 avec Swift 2.1

let str = "Hello Bob"
let strSplit = str.characters.split(" ")
String(strSplit.first!)
String(strSplit.last!)
18
Warif Akhand Rishi

Dans Swift 3 componentsSeparatedByString et split est utilisé de cette façon.

let splitArray = "Hello World".components(separatedBy: " ") // ["Hello", "World"]

split

let splitArray = "Hello World".characters.split(separator: " ").map(String.init) // ["Hello", "World"]
9
Nirav D