Autoclosure接受参数但不返回值

时间:2017-08-03 17:15:41

标签: swift closures

根据Swift docs的autoclosure的功能表明

  

autoclosure是一个自动创建的封装,用于封装   表达式作为参数传递给函数。它   不接受任何参数,当它被调用时,它返回值   包含在其中的表达式。

但是当我创建一个需要autoclosure的函数时

func test(_ clsr:@autoclosure(String)->(String)){
   let res = clsr("Hello World")
   print(res)
}
test("Good Morning")

即使语法有效,我也可以传递值,我不能在语句中使用String值。那么,这件事是不是很快就会丢失。也许它应该在定义参数时显示一些错误警告。

或者我错过了关于autoclosures的事情?

1 个答案:

答案 0 :(得分:0)

所以...您有点误解了它们的工作原理。尝试将自动关闭视为延迟执行。我认为您将它更多地看做是值传递给另一个函数的传递,这并不是它的作用。看看这个例子:

// Takes a function that has already been provided with arguments and then executes it and prints the result
func printAfterEvaluating(closure: @autoclosure () -> String) {
    let result = closure()
    print(result)
}

// A very basic function that returns a string
func returnAString(_ argument: String) -> String {
    return argument
}

// Calling the function with the other function as an argument.
printAfterEvaluating(closure: returnAString("Foo"))

希望这有助于清除一些内容。 :D