在Swift中将字符串拆分为数组

时间:2015-07-03 18:20:57

标签: string swift split

我正在尝试编写我的第一个Swift程序,我知道之前已经问过这个问题,但是使用split的答案对我来说不起作用。我正在使用Xcode 6.4和Swift 1.2。

我有一个名为line的字符串。

如果我写

 let inputs = split(line) {$0 = " "} 

Swift: Split a String into an array所示,我收到错误消息“无法使用类型的参数列表调用'split'(String,() - > )”

如果我写

let inputs = split(line, {find(" ",$0)  != nil}, allowEmptySlices: false) 

根据split now complains about missing "isSeparator"的建议,我收到错误消息,“参数中缺少参数'isSeparator'。”

如果我跳到拆分的定义,我找到了

func split<S : Sliceable, R : BooleanType>(elements: S, maxSplit: Int = default, allowEmptySlices: Bool = default, #isSeparator: @noescape (S.Generator.Element) -> R) -> [S.SubSlice]

我不明白最后一个参数的类型是什么,这可能是我问题的根源。你能告诉我应该如何调用split,甚至可以更好地解释参数类型是什么?为什么不是简单的类型(S) - &gt; R?我从一个逐行读取文件的生成器中获取该行,如果这有任何区别的话。

for line:String in reader! {
 let inputs = split(line) {$0 = " "}
 ...
} 

1 个答案:

答案 0 :(得分:2)

正如问题评论中所述,正确的方法是使用==运算符代替=

必须根据(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,并返回必须是BooleanType子类型的结果(例如truefalse,它们是Bool的实例)。所以最后一个参数是一个函数,它将Element Generator S的{​​{1}}类型作为参数获取(例如Character)并返回类型{{1}的值}}。并且R正是这种类型的谓词,它具有(隐式)参数({$0 == " "}),并检查它是否等于字符$0