2015-09-09 57 views
1

我想在我的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

return test1也应该失败,除非您的班级中有test1属性。看来你只是忘记把这些称为函数。

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

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() 
} 

真是天壤之别小,它归结于你自己的喜好,但直接从文件:

嵌套函数是具有名称并可从其封闭函数捕获值的闭包。

闭合表达式是写在一个轻量级的语法,可以从他们的周围上下文捕捉值的未命名关闭。

无论哪种方式,这两种情况都与()在执行他们的动作名称的末尾被调用,否则你返回一个函数,而不是它的评价。你return test1将是唯一有效的在这种情况下:

func test() -> (() -> Bool) { 
    func test1() -> Bool { 
     return true 
    } 

    return test1 
} 

在您的函数的返回类型为功能返回布尔后,您评估它。您想要评估,并返回与逻辑AND语句组合的Bool值。因此,您必须评估每个函数以获取每个函数的Bool值,以便将其合并并返回最终值。

+0

感谢米哈尔这样精心设计的答案! –

+0

@MinkeshJain只是试图解释发生了什么,不只是盲目地给修补程序:) – Michal

+0

@MinkeshJain不要忘记标记帮助你接受的答案。如果您的问题尚未解决,请随时提问。 – Michal