【问题标题】:'Int' is not identical to 'UInt8' in closure'Int' 与闭包中的 'UInt8' 不同
【发布时间】:2014-10-29 02:54:35
【问题描述】:

我正在尝试创建一个保持对外部函数的局部变量的引用的闭包,但我不断收到这个模棱两可的错误 int is not same to unint8。这对我来说没有意义,因为这里没有涉及数组。这里也没有UInt8s

func increment(n:Int)-> ()->Int {
    var i = 0
    var incrementByN = {
        () -> Int in
        i += n
    }
    return incrementByN
}
var inner = increment(4)
inner()
inner()
inner()

我发现我可以通过在 i+=n 之后返回 i 来解决此问题。我以为i+=n 会自行返回,但显然不会。

【问题讨论】:

  • FWIW,它可以通过显式返回 i 来修复(而不是 += 的值,这可能会在这里丢掉东西):i+=n; return i;
  • @Thilo 你写的正是我写的时间。

标签: swift int closures uint8t


【解决方案1】:

+= for (Int, Int) 被声明为

func +=(inout lhs: Int, rhs: Int)

它什么也不返回。

不过,我不知道为什么 UInt8 会涉及。 也许是因为func +=(inout lhs: UInt8, rhs: UInt8)func +=(...) 声明的最后一个

【讨论】:

    【解决方案2】:

    不确定 UInt8 是关于什么的,但似乎 += 没有值。

    var i = 1;
    let x = i += 3;  // now x is of type () 
    

    你可以显式返回i的新值:

    var incrementByN = {
        () -> Int in
        i += n
        return i
    }
    

    【讨论】:

      猜你喜欢
      • 2014-09-29
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2017-11-12
      • 2021-11-04
      • 1970-01-01
      • 2019-06-13
      • 2020-03-03
      相关资源
      最近更新 更多