原始代码:
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
的子类型我尝试了其他方式(反向返回类型,但给了我类似的错误)
问题二:在这种情况下,这种类型的转换是如何工作的?
答案 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
}