'条件'这里的快速教程----功能?

时间:2016-12-07 09:37:48

标签: swift

我知道在第一行中,我们可以使用 lessThanTen(数字:Int) 来替换 (int) < / strong>, contidion 表示标签,但在第三行:*为什么我们不使用 if condition:(item) 替换 if condition(item) ,因为 条件 是标签。 enter image description here

2 个答案:

答案 0 :(得分:6)

条件是您在该方法上接收的方法,如果您查看该方法签名:

condition: (int) -> Bool

这意味着你正在接收一个可以使用Int类型的参数调用的条件并返回一个bool。在任何地方,里面:

hasAnyMatches 

您将能够使用

condition(anyInt)

现在,如果你看一下方法调用者:

hasAnyMatches(list: numbers, condition: lessThanTen)

所以,你是说&#39;条件&#39; on&#39; hasAnyMatches&#39;将会少于此十分之一。这意味着在你的

if condition(item)

真正发生的是:

if lessThanTen(item)

我希望它更清楚!

答案 1 :(得分:4)

condition是一个Bool - 返回提供给hasAnyMatches的闭包,需要调用以产生一个布尔值。闭包采用类型为Int的单个参数,该参数与list的元素的类型相同。因此,我们在每个项目上调用提供的(Int) -> Bool闭包,如果condition应用于项目返回true,我们会在{{{{}}上切断遍历1}}项目短并从函数返回list

使用函数式编程tecniques,我们可以在true上使用reduce操作来压缩list的实现:

hasAnyMatches

或者,甚至更好(允许在原始循环中退出func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool { return list.reduce(false) { $0 || condition($1) } } ),如@Hamish在下面的评论中所描述的那样(谢谢!),使用return

contains

使用示例:

func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool {
    return list.contains(where: condition)
}