在 Swift 中将字符串拆分为数组
Split a string into an Array in Swift
我正在尝试编写我的第一个 Swift 程序,我知道这个问题之前已经被问过,但是使用 split 的答案对我不起作用。我正在使用 Xcode 6.4 和 Swift 1.2.
我有一个名为 line 的字符串。
如果我写
let inputs = split(line) {[=11=] = " "}
按照 Swift: Split a String into an array 的建议,我收到错误消息 "Cannot invoke 'split' with an argument list of type (String, ()->)"
如果我写
let inputs = split(line, {find(" ",[=12=]) != nil}, allowEmptySlices: false)
按照 的建议,我收到错误消息,"Missing argument for parameter 'isSeparator' in call."
如果我跳转到拆分的定义,我发现
func split<S : Sliceable, R : BooleanType>(elements: S, maxSplit: Int = default, allowEmptySlices: Bool = default, #isSeparator: @noescape (S.Generator.Element) -> R) -> [S.SubSlice]
我不明白最后一个参数的类型是什么,这可能是我问题的根源。你能告诉我应该如何调用 split,更好的是你能解释一下参数类型是什么吗?为什么类型不是简单的 (S)->R?我正在从逐行读取文件的生成器中获取行,如果这有什么不同的话。
for line:String in reader! {
let inputs = split(line) {[=14=] = " "}
...
}
如问题评论中所述,正确的方法是使用 ==
运算符而不是 =
。
类型(S.Generator.Element) -> R)
必须根据split
的定义来解释:
func split<S : Sliceable, R : BooleanType>
(elements: S,
maxSplit: Int = default,
allowEmptySlices: Bool = default,
#isSeparator: @noescape (S.Generator.Element) -> R)
-> [S.SubSlice]
split
的类型是泛型:换句话说,它是一个函数,可以将满足Sliceable
的泛型(或协议)子类型的任何值作为第一个参数,如 String
和 return 结果必须是 BooleanType
的子类型(例如 true
或 false
,它们是 Bool 的实例)。所以最后一个参数是一个函数,它获取一个类型的参数,该类型是 Element
of Generator
of S
(例如 Character
)和 returns 的值输入 R
。而 {[=26=] == " "}
正是这种类型的谓词,它有一个(隐式)参数([=27=]
),并检查它是否等于字符 " "
.
我正在尝试编写我的第一个 Swift 程序,我知道这个问题之前已经被问过,但是使用 split 的答案对我不起作用。我正在使用 Xcode 6.4 和 Swift 1.2.
我有一个名为 line 的字符串。
如果我写
let inputs = split(line) {[=11=] = " "}
按照 Swift: Split a String into an array 的建议,我收到错误消息 "Cannot invoke 'split' with an argument list of type (String, ()->)"
如果我写
let inputs = split(line, {find(" ",[=12=]) != nil}, allowEmptySlices: false)
按照
如果我跳转到拆分的定义,我发现
func split<S : Sliceable, R : BooleanType>(elements: S, maxSplit: Int = default, allowEmptySlices: Bool = default, #isSeparator: @noescape (S.Generator.Element) -> R) -> [S.SubSlice]
我不明白最后一个参数的类型是什么,这可能是我问题的根源。你能告诉我应该如何调用 split,更好的是你能解释一下参数类型是什么吗?为什么类型不是简单的 (S)->R?我正在从逐行读取文件的生成器中获取行,如果这有什么不同的话。
for line:String in reader! {
let inputs = split(line) {[=14=] = " "}
...
}
如问题评论中所述,正确的方法是使用 ==
运算符而不是 =
。
类型(S.Generator.Element) -> R)
必须根据split
的定义来解释:
func split<S : Sliceable, R : BooleanType>
(elements: S,
maxSplit: Int = default,
allowEmptySlices: Bool = default,
#isSeparator: @noescape (S.Generator.Element) -> R)
-> [S.SubSlice]
split
的类型是泛型:换句话说,它是一个函数,可以将满足Sliceable
的泛型(或协议)子类型的任何值作为第一个参数,如 String
和 return 结果必须是 BooleanType
的子类型(例如 true
或 false
,它们是 Bool 的实例)。所以最后一个参数是一个函数,它获取一个类型的参数,该类型是 Element
of Generator
of S
(例如 Character
)和 returns 的值输入 R
。而 {[=26=] == " "}
正是这种类型的谓词,它有一个(隐式)参数([=27=]
),并检查它是否等于字符 " "
.