我怀疑我错过了一些非常明显错误的东西,所以请原谅我,如果我有点厚。
我在闭包中看到的所有示例都是用于将闭包传递给数组映射函数。我想编写自己的函数,它接受一个闭包
这就是我的尝试
func closureExample(numberToMultiply : Int, myClosure : (multiply : Int) -> Int) -> Int
{
// This gets a compiler error because it says myClosure is not an Int
// I was expecting this to do was to invoke myClosure and return an Int which
// would get multiplied by the numberToMultiply variable and then returned
return numberToMultiply * myClosure
}
我完全不知道我做错了什么
请帮助!!
答案 0 :(得分:2)
使用()
调用任何函数的方式相同。
return numberToMultiply * myClosure(multiply: anInteger)
一个工作示例:
func closureExample(numberToMultiply : Int, myClosure : (multiply : Int) -> Int) -> Int {
return numberToMultiply * myClosure(multiply: 2)
}
closureExample(10, { num in
return 2*num
}) // 40
答案 1 :(得分:1)
您将闭包参数视为使用参数名称命名的函数。 myClosure
是需要在numberToMultiply
上运行的闭包,因此您需要:
return myClosure(numberToMultiply)
这会将numberToMultiply传递给你的闭包,并返回返回值。