以下代码抛出错误,'Int'不是'()'
的子类型func addHelpFunction() -> (Int -> Int){
func adderfunc() -> Int {
return 6
}
return adderfunc
}
现在,如果我参数化内部函数,它可以正常工作
func addHelpFunction() -> (Int -> Int){
func adderfunc(number: Int) -> Int {
return 6
}
return adderfunc
}
编译代码后,它会抛出一个新错误“使用退出代码254失败”
答案 0 :(得分:1)
您的addHelpFunction()
函数返回的函数类型为(Int) -> (Int)
。在第一个示例中,您将返回adderFunc()
,其类型为() -> (Int)
,因此违反了所需的返回类型。在第二个示例中,adderFunc()
输入正确。
请注意,实现addHelpFunction()
的更惯用的方法是将匿名闭包返回为:
func addHelpFunction() -> (Int -> Int) {
return { (n:Int) -> (Int) in return 6 }
}
行动中:
41> var ret6 = addHelpFunction()
ret6: (Int -> Int) =
42> ret6(10)
$R19: (Int) = 6
使用惯用闭包可能会避免可能的编译错误。