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.
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
:
Utilisez componentsSeparatedByString
:
"ab cd".componentsSeparatedByString(" ") // ["ab", "cd"]
Comme l'a souligné @dawg, cela nécessite import Foundation
.
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) // ["????", "????????"]
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:)
.let str = "Hello Bob"
let strSplitArray = str.split(separator: " ")
strSplitArray.first! // "Hello"
strSplitArray.last! // "Bob"
let str = "Hello Bob"
let strSplit = str.characters.split(" ")
String(strSplit.first!)
String(strSplit.last!)
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"]