我正在关注Apple的电子书“The Swift Programming Language”。在其中,有一个代码示例创建一个函数。这个函数最后使用“ - > Bool”,我理解这意味着函数将有一个布尔输出。
要配置该功能,它使用两个输入变量。其中一个变量是“Int - > Bool”(见下面的代码)。也许稍后在电子书中有更好的解释,但我的搜索无法解释我将如何以及为何使用“ - >”对变量的命名法。
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, 10, 12]
hasAnyMatches(numbers, lessThanTen)
由于没有真正解释过,我可以阅读代码示例的最好方法是“条件”变量实际上不是变量而是函数本身。因此,我阅读代码的方式如下:
“condition是一个接受整数并返回布尔变量的函数。”
这个假设是否正确?
谢谢。
答案 0 :(得分:4)
你的假设是正确的。在Swift中,函数可以作为函数中的参数传递。
据我所知,您引用的代码来自Apple&#34; The Swift Programming Language&#34;电子书。附近,它声明:
“一个函数可以将另一个函数作为其参数之一。”
基本上,这里发生的是你创造了一个功能,&#34; lessThanTen()&#34;接受一个Int参数并返回一个Bool值。接下来,您将创建另一个函数,&#34; hasAnyMatches&#34;它本身使用一个函数(即Int - &gt; Bool)。如果您有不同的函数来获取和返回相同的值类型,但这些函数具有不同的用途,那么这将非常有用。
然后,您可以将原始函数作为参数传递,就像变量一样。该函数可以采用任何形式,只要它满足第二个函数指定的条件(即&#34;条件:Int - &gt; Bool&#34;)。
总之,在第二个功能中你有一行
if condition(item) {
基本上,这一行运行函数&#34; condition&#34;实际上,这只是另一个作为参数传递的函数。我可以创建任何接受Int并返回Bool值的函数,然后将其传递给&#34; hasAnyMatches&#34;。
如果您想了解更多相关内容,我建议您继续深入研究&#34; The Swift Programming Language&#34;到标题为&#34;功能&#34;的章节。它说:
“您可以使用函数类型,例如(Int,Int) - &gt; Int作为另一个函数的参数类型。这使您可以为函数调用者保留函数实现的某些方面,以便在调用函数时提供。“(第141页)
我希望这能回答你的问题:)