Let's say I want to split a string by an empty space. This code snippet works fine in Swift 1.x. It does not work in Swift 2 in Xcode 7 Beta 1.
var str = "Hello Bob" var foo = split(str) {$0 == " "}
I get the following compiler error:
Cannot invoke 'split' with an argument list of type '(String, (_) -> _)
Anyone know how to call this correctly?
Updated: Added a note that this was for the Xcode 7 beta 1.
To split a String by Character separator in Swift, use String. split() function. Call split() function on the String and pass the separator (character) as argument. split() function returns a String Array with the splits as elements.
You can use components(separatedBy:) method to divide a string into substrings by specifying string separator. let str = "Hello! Swift String."
Description. The Split function breaks a text string into a table of substrings. Use Split to break up comma delimited lists, dates that use a slash between date parts, and in other situations where a well defined delimiter is used. A separator string is used to break the text string apart.
To convert a string to an array, we can use the Array() intializer syntax in Swift. Here is an example, that splits the following string into an array of individual characters. Similarly, we can also use the map() function to convert it. The map() function iterates each character in a string.
split
is a method in an extension of CollectionType
which, as of Swift 2, String
no longer conforms to. Fortunately there are other ways to split a String
:
Use componentsSeparatedByString
:
"ab cd".componentsSeparatedByString(" ") // ["ab", "cd"]
As pointed out by @dawg, this requires you import Foundation
.
Instead of calling split
on a String
, you could use the characters of the String
. The characters
property returns a String.CharacterView
, which conforms to CollectionType
:
"😀 🇬🇧".characters.split(" ").map(String.init) // ["😀", "🇬🇧"]
Make String
conform to CollectionType
:
extension String : CollectionType {} "w,x,y,z".split(",") // ["w", "x", "y", "z"]
Although, since Apple made a decision to remove String
's conformance to CollectionType
it seems more sensible to stick with options one or two.
In Swift 3, in options 1 and 2 respectively:
componentsSeparatedByString(:)
has been renamed to components(separatedBy:)
. split(:)
has been renamed to 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!)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With