【问题标题】:Nested Function in Swift return type casting errorSwift 返回类型转换错误中的嵌套函数
【发布时间】:2014-06-04 13:07:53
【问题描述】:

原代码:

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 的子类型

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

问题二:这种类型的铸造在这种情况下是如何工作的?

【问题讨论】:

    标签: casting swift


    【解决方案1】:

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

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

    【讨论】:

      【解决方案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

      【讨论】:

      • -> String 表示返回StringInt 是参数。
      猜你喜欢
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      • 1970-01-01
      相关资源
      最近更新 更多