split now complains about missing isSeparator
It seems that the order of the parameters changed in Swift 1.2:
let bits = split(value!, maxSplit: Int.max, allowEmptySlices: false,
isSeparator: { $0 == " "})
or, using the default values:
let bits = split(value!, isSeparator: { $0 == " "})
The predicate is now the last parameter and requires an external
parameter name isSeparator
because it is preceded by optional parameters.
The advantage of this change is that you can use the trailing closure
syntax:
let bits = split(value!, maxSplit: Int.max, allowEmptySlices: false) { $0 == " " }
or
let bits = split(value!) { $0 == " " }
Function remove(atOffsets:) complains about wrong type only at runtime
You should add:
import SwiftUI
to your script because it contains remove(atOffsets:)
implementation and XCode doesn't import this framework implicitly.
Split a string into an Array in Swift
As said in the comments to the question, the correct way is to use the ==
operator instead of =
.
The type (S.Generator.Element) -> R)
must be interpreted in the light of the definition of split
:
func split<S : Sliceable, R : BooleanType>
(elements: S,
maxSplit: Int = default,
allowEmptySlices: Bool = default,
#isSeparator: @noescape (S.Generator.Element) -> R)
-> [S.SubSlice]
The type of split
is a generic one: in other words, it is a function that can take as first parameter any value that satisfy a generic type (or protocol) subtype of Sliceable
, like String
, and return a result which must be a subtype of BooleanType
(for instance true
or false
, which are instances of Bool). So the last parameter is a function which gets as parameter a type which is Element
of Generator
of S
(for instance Character
) and returns a value of type R
. And {$0 == " "}
is exactly a predicate of this type, that has an (implicit) parameter ($0
), and check if it is equal to the character " "
.
Swift version of componentsSeparatedByString
If you want to split a string by a given character then you can use the
built-in split()
method, without needing Foundation:
let str = "Today is so hot"
let arr = split(str, { $0 == " "}, maxSplit: Int.max, allowEmptySlices: false)
println(arr) // [Today, is, so, hot]
Update for Swift 1.2: The order of the parameters changed with Swift 1.2 (Xcode 6.3), compare split now complains about missing "isSeparator":
let str = "Today is so hot"
let arr = split(str, maxSplit: Int.max, allowEmptySlices: false, isSeparator: { $0 == " "} )
println(arr) // [Today, is, so, hot]
Update for Swift 2: See Stuart's answer.
Update for Swift 3:
let str = "Today is so hot"
let arr = str.characters.split(separator: " ").map(String.init)
print(arr)
Why did the width collapse in the percentage width child element in an absolutely positioned parent on Internet Explorer 7?
The parent div
needs to have a defined width
, either in pixels or as a percentage. In Internet Explorer 7, the parent div
needs a defined width
for child percentage div
s to work correctly.
Related Topics
How to Access a Shadowed Top Level Function in Swift
Returning a Value from a Function with Alamofire and Swiftyjson
Firebase: How to Update Multiple Nodes Transactionally? Swift 3
Firebase Get User Uid by Email
Fibonacci Numbers Generator in Swift 3
Swift: Change the Cell's Uibutton Image with Tableview Didselect Method
How to Convert Any Generic Numeric into a Double
Querying Below Autoid's in Firebase
Split a String Without Removing the Delimiter in Swift
Binary Operator '/' Cannot Be Applied to Two 'Double' Operands
Split Now Complains About Missing "Isseparator"
How to Append a Tuple to an Array Object in Swift Code
Remove Default Padding from List in Swiftui
How to Change Back Button Title on Navigation Controller in Swift3
Avaudioengine Downsample Issue
Uitableviewautomaticdimension Not Working for Resizing Cell Height