Swift返回类型转换错误中的嵌套函数

时间:2014-06-04 13:07:53

标签: casting swift

原始代码:

func makeIncrement()->(Int->Int){
    func addOne(Number:Int)->Int{
        return 1 + Number
    }

    return addOne
}

问题一:(Int-> Int)是否像这样中断 - 第一个Int是内部函数的返回类型,第二个Int是外部的返回类型?我通过将代码更改为:

来进行自我实验
func makeIncrement()->(Int->String){
    func addOne(Number:Int)->Int{
        return 1 + Number
    }

    return String(addOne)
}
弹出

错误说NSString不是Int-> String

的子类型

我尝试了其他方式(反向返回类型,但给了我类似的错误)

问题二:在这种情况下,这种类型的转换是如何工作的?

2 个答案:

答案 0 :(得分:3)

  

问题一:(Int-> Int)是否像这样中断 - 第一个Int是内部函数的返回类型,第二个Int是外部函数的返回类型?

不,(Int -> Int)是外部函数的返回类型,这意味着它返回一个函数,该函数将Int作为参数并返回Int。因此,您需要返回具有这些特征的函数。

答案 1 :(得分:2)

addOne是一个功能。您不能简单地使用函数并将其转换为文本(String)。

func makeIncrement() -> (Int -> String) {

表示您要返回一个以Int作为参数并返回String

的函数

您必须先创建这样的功能:

func addOneAsString(number: Int) -> String {
    return String(1 + number)
}

然后归还:

func makeIncrement() -> (Int -> String){
    func addOneAsString(number: Int) -> String {
        return String(1 + number)
    }

    return addOneAsString
}

请参阅Swift Reference - Functions