我在游乐场中编写了以下代码,并尝试向Apple doc功能&类。
这是我的代码..
func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(numbers, condition: lessThanTen)
我怎样才能直接传递不同的条件? 我能这样写吗......
hasAnyMatches(numbers, condition: { $0 < 10 })
实际上这个函数返回true / false,但是当我这样写的时候代表这行代码o / p :( 4次) 那么当我这样写的时候会发生什么。
并给我解决方案直接传递hasAnyMatches()函数中的条件。
答案 0 :(得分:1)
你写它的方式很好!你只是错过了调用中的第一个参数标签。它应该是:
hasAnyMatches(list: numbers, condition: { $0 < 10 })
答案 1 :(得分:1)
当你这样写:
hasAnyMatches(numbers, condition: { $0 < 10 })
游乐场说“(4次)”。这是因为关闭{ $0 < 10 }
执行了四次,numbers
中每个项目执行一次。
要让它显示hasAnyMatches
函数的返回值,有几种方法可以做到这一点。
您可以将{$0 < 10}
放在自己的行上:
hasAnyMatches(list: numbers, condition: // shows true on this line
{$0 < 10} // shows (4 times) on this line
)
您可以将结果存储到变量中,然后获取变量的值:
let val = hasAnyMatches(list: numbers, condition: {$0 < 10})
val // shows true on this line
答案 2 :(得分:1)
hasAnyMatches函数获取数字列表和条件闭包,这样你就可以传递任何带Int的闭包并返回bool
let numbers = [20, 19, 7, 12]
let lessThan: (Int) -> Bool = { $0 < 10 }
let match = hasAnyMatches(list: numbers, condition: lessThan)
print(match)
编写相同内容的另一种方法是使用filters迭代一个集合并返回一个只包含与include条件匹配的元素的Array。使用过滤器的主要优点是它内置,你不需要单独的hasAnyMatches函数来检查条件
let numbers = [20, 19, 7, 12]
let match = numbers.filter ({ $0 < 10 }).count > 0
print(match)