1

我正在尝试创建一个保持对外部函数的局部变量的引用的闭包,并且我不断收到这个模棱两可的错误 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在之后返回来解决这个问题i+=n。我认为它i+=n会自行返回,但显然它不会。

4

2 回答 2

3

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

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

它什么也不返回。

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

于 2014-10-29T03:12:13.913 回答
2

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

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

您可以显式返回 的新值i

var incrementByN = {
    () -> Int in
    i += n
    return i
}
于 2014-10-29T03:11:49.603 回答