代码之家  ›  专栏  ›  技术社区  ›  John Henckel

如何在Swift中存储对整数的引用

  •  3
  • John Henckel  · 技术社区  · 9 年前

    我知道swift既有引用类型,也有值类型。我知道Int是一种值类型。但如何存储对整数的引用?

    var x:Int = 1
    var y:Int = x   // I want y to reference x (not copy)
    ++y
    println(x)     // prints 1, but I want 2
    

    我尝试过使用盒装类型,也尝试过使用Int数组,但都不适用于保存对整数的引用。

    我想我可以自己写

    class IntRef {
        var a:Int = 0
        init(value:Int) { a = value }
    }
    
    var x:IntRef = IntRef(value: 3)
    var y = x
    ++y.a
    println(x.a)
    

    看起来有点尴尬。

    2 回复  |  直到 9 年前
        1
  •  5
  •   Qbyte    9 年前

    遗憾的是,没有引用类型 Integer 或者类似于Swift的东西,所以你必须自己制作一个Box Type。

    例如,一个通用的:

    class Reference<T> {
        var value: T
        init(_ value: T) { self.value = value }
    }
    
        2
  •  -1
  •   John Henckel    9 年前

    您也可以使用闭包。我认为这些更好,因为它们更强大,也更具体。它们不仅存储引用,还指示如何使用引用。例如

    var x:Int = 1
    var setx = { (a:Int) in x = a }
    var getx = { x }
    setx(getx() + 1)
    println(x)             // This will print 2
    

    我不建议实际定义getx/setx。定义为应用程序执行特定任务的闭包。