'Int'不是'()'Swift的子类型

时间:2014-07-05 00:44:14

标签: ios swift xcode6

以下代码抛出错误,'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失败”

1 个答案:

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

使用惯用闭包可能会避免可能的编译错误。