[swift]很迷茫,如何以及何时嵌套函数的参数得到称为和传递价值吗?

标签: Swift
发布时间: 2017/3/6 22:59:48
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

该代码示例来自办公室 swift 文档

let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
func backwards(s1: String, _ s2: String) -> Bool {
    return s1 > s2
}
var reversed = names.sort(backwards)

backwards函数作为方法的参数 sort(_:) 。 函数 backwards 返回布尔值。然而,当我尝试这 names.sort(true) 我收到编译器错误 !

为什么在示例代码中有没有错误?

另一个问题是,用什么 s1s2 作为参数?何时他们做得到叫?如何在字符串 names 数组传递到他们吗?

解决方法 1:

后退时函数返回布尔值,不过,我试过这 names.sort(true)

所用的排序方法实际上是 sort(isOrderedBefore: (Element, Element) -> Bool) 将比较函数作为参数的方法。函数具有采取组特定的接口,即采用两个函数中指定的参数 Element 参数并返回 Bool

正如 gnasher 解释,您收到的错误因为 true 是一个值,不是函数。您可以编写一个函数,返回 true ,和那应该工作。使用 Swift 的尾随闭包语法,您可以编写︰

names.sort() {return true}

这显然不是非常有用的实际排序,但是它显示如何使您的工作的例子。

有什么 s1 和 s2 作为参数?何时他们做得到叫?如何名称数组中的字符串得到传递到他们吗?

这就是这份工作的 sort 方法。它是实例方法,属于 ArraySlice ,和它比较两个切片中的元素一次以确定他们的排序方式。实际的比较是使用中,传递的比较方法,以便您可以使用相同 sort 对你使用任何你能想到的排序顺序的数组进行排序的方法。试着这样做︰

let names = ["Harry", "David", "Susan", "Alice"]
let sortedNames = names.sort() {
    print($0, $1)
    return $0 < $1
}

你应该看看作为输出行的列表 sort() 重复调用你的比较方法。

官方微信
官方QQ群
31647020