我正在尝试在我的Swift程序中使用嵌套函数。
func test()->Bool{
func test1()->Bool{
return true
}
func test2()->Bool{
return true
}
func test3()->Bool{
return true
}
return test1 && test2 && test3
}
它给了我一些错误!但如果我试着
return test1
工作正常。
请解释为什么它在嵌套函数中应用运算符时出错。
答案 0 :(得分:3)
嵌套函数/闭包有两种方法:
如你所愿:
func test() -> Bool {
func test1() -> Bool {
return true
}
func test2() -> Bool {
return true
}
func test3() -> Bool {
return true
}
return test1() && test2() && test3()
}
或者将其保存到闭包并调用它们:
func test() -> Bool {
let test1 = { () -> Bool in
return true
}
let test2 = { () -> Bool in
return true
}
let test3 = { () -> Bool in
return true
}
return test1() && test2() && test3()
}
差异非常小,这取决于您自己的偏好,但直接来自文档:
嵌套函数是具有名称的闭包,可以从其封闭函数中捕获值。
和
Closure表达式是一种未命名的闭包,用轻量级语法编写,可以从周围的上下文中捕获值。
无论哪种方式,都必须在名称末尾使用()
调用这两个案例来执行其操作,否则您将返回一个函数而不是其评估。您的return test1
仅在此情况下有效:
func test() -> (() -> Bool) {
func test1() -> Bool {
return true
}
return test1
}
你的函数的返回类型是函数,它在之后返回Bool 你评估它。您想要评估并返回Bool值和逻辑AND语句。因此,您必须评估每个函数以获取每个函数的Bool值以将其组合并返回最终值。
答案 1 :(得分:0)
return test1
也会失败。您似乎只是忘记将这些称为函数。
return test1() && test2() && test3()
会工作得很好。