当每个函数只返回一个 Int 时,这个函数如何调用这个闭包?

How does this function call this closure when each returns just a single Int?

提问人:Ryan Ashton 提问时间:12/7/2022 最后编辑:Dávid PásztorRyan Ashton 更新时间:12/7/2022 访问量:31

问:

我发现这段代码非常令人困惑:

let myClosure = { (number1: Int, number2: Int) -> Int in
    return number1 * number2
}

func useClosure(closure: (Int, Int) -> Int) {
    let result = closure(2, 3)
    print(result) // prints 6
}

useClosure(closure: myClosure)

func 接受 2 个 Int,参数名称是闭包,但只有 1 个返回 Int,那么它怎么可能是 的参数呢?useClosureclosuremyClosuremyClosureuseClosure

从哪里来?从?myClosurenumber1number2useClosure

从表面上看,似乎 2 和 3 正在传递,但目前尚不清楚这是如何发生的。myClosure

在我看来,这一切都是循环的,没有什么意义。

我还没有真正尝试过任何事情来“解决”这个问题,因为它并不真正需要解决。代码工作正常。我只是在努力理解它——从我作为开发人员的旅程中的位置。

SWIFT 函数 闭包

评论

0赞 Community 12/7/2022
请澄清您的具体问题或提供其他详细信息,以准确说明您的需求。正如目前所写的那样,很难确切地说出你在问什么。

答:

2赞 Dávid Pásztor 12/7/2022 #1

如果你看一下声明 - 或者更好的是,option+单击它 - 你会看到它的类型是 .这正是输入参数所期望的类型。myClosure(Int, Int) -> IntuseClosure

该类型签名表示一个闭包,它接受两个 s 作为输入并返回一个 .IntInt

func useClosure 采用 2 个 Int,参数名称为 closure

useClosure闭包作为其输入,而不是您声称的一对 S。Int

您将内部的值传递给输入参数 。useClosureclosure

查看类型签名时,左侧的所有内容都表示函数的输入参数,而右侧的所有内容都表示返回类型。->