我正在尝试创建一个可以接受一个函数和一个Int
(numberOfTimes)的函数,然后调用doFunctionXTimes()
一定次数。但是,它只打印一次“Hello Ethan”(相对于5次)。这是我的代码:
func doFunctionXTimes(numberOfTimes: Int,function: Any) {
for _ in 1...numberOfTimes {
function
}
}
func sayHello(name: String) {
print("Hello \(name)")
}
doFunctionXTimes(5, function: sayHello("Ethan"))
//this code prints "Hello Ethan"
但是,如果在
doFunctionXTimes()
的for循环中将_更改为i,然后在我称为print(i)
的上方或下方添加function
语句,它将打印出从1到5的所有数字。被调用和打印print(i)
语句的次数被多次调用。谢谢。这是我编辑的代码打印i。func doFunctionXTimes(numberOfTimes: Int,function: Any) {
for i in 1...numberOfTimes {
print(i)
function
// or the print(i) statement can here. It does not affect the output.
}
}
func sayHello(name: String) {
print("Hello \(name)")
}
doFunctionXTimes(5, function: sayHello("Ethan"))
// this code prints out "Hello Ethan" and then 1 2 3 4 5
任何帮助或建议都很棒,希望对以后的观众有所帮助。
最佳答案
看下面的代码:
doFunctionXTimes(5, function: sayHello("Ethan"))
sayHello("Ethan")
部分是一个函数调用。因此,当代码行运行时,它首先调用此函数-在输入doFunctionXTimes
之前。然后在代码中,您将拥有:function
这实际上并没有调用该函数(类似于将0单独放在一行上)。为了实现所需的功能,您需要一个闭包,该闭包将“包装”您要调用的函数:
func doFunctionXTimes(numberOfTimes: Int,function: (() -> Void)) {
for _ in 1...numberOfTimes {
function()
}
}
func sayHello(name: String) {
print("Hello \(name)")
}
doFunctionXTimes(5, function: { sayHello("Ethan") })
现在,函数以
{ sayHello("Ethan") }
的形式传递,直到调用该函数,才会调用sayHello
。请注意,该函数现在定义为
() -> Void
,这意味着它是一个不带参数且不返回值的函数。 (我在定义周围加上了大括号,因为我发现它提高了清晰度)关于ios - 具有麻烦的执行功能,但没有for循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36049053/