如何阅读swift标题

时间:2016-01-07 17:03:56

标签: swift

当我cmd单击Xco​​de中的分割功能时,它会转到头文件。这就是它的内容

public func split(maxSplit: Int = default, allowEmptySlices: Bool = default, @noescape isSeparator: (Self.Generator.Element) throws -> Bool) rethrows -> [Self.SubSequence]

以下实现如何与上述声明一起使用?

someString.characters.split { $0 == "." }

3 个答案:

答案 0 :(得分:5)

您的专家splitlist[order(sapply(splitlist, function(x) (x[["Revenue"]])))] 使用someString.characters.split { $0 == "."}maxSplit的默认值,并指定allowEmptySlices的自定义关闭。 调用函数isSeparator的某些更长版本是:

split

由于上面的代码使用与实际默认值(let arr = str.characters.split(Int.max, allowEmptySlices: false) { (char) -> Bool in char == "." } Int.max相同的值),因此您可以删除前两个参数,因为闭包是最后一个参数(使其成为尾随闭包)您可以省略整个参数,只需按以下方式编写闭包:

false

现在我们可以通过省略特定签名来简化闭包:

let arr = str.characters.split { (char) -> Bool in
    char == "."
}

答案 1 :(得分:5)

让我们分解一下:

public func split(maxSplit: Int = default, allowEmptySlices: Bool = default, @noescape isSeparator: (Self.Generator.Element) throws -> Bool) rethrows -> [Self.SubSequence]

maxSplit:第一个参数maxSplit允许您指定序列将被分割的最大片段数。默认值为Int.max

allowEmptySlices:第二个参数allowEmptySlices指定序列中的两个连续分隔符是否应该导致空切片。默认值为false。例如,如果您有一个字符串"A..B",并且您在.字符上拆分,则最终可能会有两个(["A", "B"])或三个(["A", "", "B"])项在输出数组中,取决于您为此参数传递的内容。

isSeparator:最后一个参数是您传递的闭包,用于标识拆分序列的位置。

由于maxSplitallowEmptySlices都有默认参数,因此除非您想要更改它们,否则不需要在函数调用中包含它们。您必须提供的唯一参数是isSeparator闭包。

在您的情况下,您致电:

someString.characters.split { $0 == "."}

......相当于:

someString.characters.split(maxSplit: Int.max, allowEmptySlices: false) { $0 == ".' }

您也可以像这样编写函数调用:

someString.characters.split(isSeparator: { $0 == "." })

你编写它的方式使用了“尾随闭包”语法。如果一个函数接受一个闭包作为它的最后一个参数,你可以将括号移动到括号之外,如下所示:

someString.characters.split() { $0 == "." }

如果函数只使用一个参数(不计算你没有提供的任何默认参数),那么你可以完全省略括号:

someString.characters.split { $0 == "." }

在最高级别,会发生split遍历字符序列的情况。它使用提供的闭包测试每个字符,如果闭包返回true,它会在该字符上拆分序列。在您的情况下,它会在每次找到"."时分割字符序列。

其他一些说明:

rethrows:整个功能标记为rethrows。它会抛出一个错误,但前提是你为isSeparator参数传递的闭包会抛出一个错误。请注意,isSeparator参数允许您传递抛出错误的闭包,但您不必这样做。每当函数接受抛出错误的闭包时,它也会接受不抛出的闭包。这是因为非投掷函数是投掷函数的子类型。

@noescapeisSeparator参数标记为@noescape。这只是意味着闭包中的任何内容都不会在split的调用结束后继续存在。

答案 2 :(得分:2)

someString.characters.split { $0 == "."}

相当于

someString.characters.split(isSeparator: { $0 == "."})

代码中的闭包称为trailing closure,函数的最后一个参数的闭包可以放在函数声明之后,如果没有其他参数,你也可以省略()

前两个参数具有默认值,因此可以省略它们,从而导致您发布的简化调用。

相关问题