swift中的嵌套函数错误

时间:2015-09-09 08:42:12

标签: swift nested-function

我正在尝试在我的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

工作正常。

请解释为什么它在嵌套函数中应用运算符时出错。

2 个答案:

答案 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)

除非你的类中有test1属性,否则

return test1也会失败。您似乎只是忘记将这些称为函数。

return test1() && test2() && test3() 会工作得很好。