Swift:如何存储对Double,Int的引用

时间:2015-09-17 06:52:01

标签: swift pass-by-reference swift2

我想在Swift中存储对基本类型(Double,Int)的引用,这样我就可以更改一个变量,也可以更改另一个变量。这是一个例子:

class MyClass {
    var value: Double?
}

var myValue = 1.0

var instance = MyClass()
instance.value = myValue    // <-- how to set a reference?

myValue = 2.0               // => I want instance.value to change to 2.0
instance.value = 3.0        // => I want myValue to change to 3.0

这可能吗?

2 个答案:

答案 0 :(得分:1)

你可以使用持有者:

class Ref<T> {
  var value: T

  init(_ value: T) {
    self.value = value
  }
}

或尝试阅读In-Out参数,也许它可以以某种方式帮助您:

<强> In-Out Parameters

  

如上所述,变量参数只能在其中更改   功能本身。如果你想要一个函数来修改参数   值,并且您希望在函数调用后这些更改仍然存在   已结束,请将该参数定义为输入输出参数。

     

您可以通过将inout关键字放在其中来编写输入输出参数   开始其参数定义。输入输出参数具有值   传入函数的函数由函数修改,并且是   传回函数以替换原始值。

     

您只能将变量作为输入输出参数的参数传递。   您不能传递常量或文字值作为参数,因为   常量和文字不能修改。你放了一个&符号(&amp;)   当您将变量作为参数传递给变量时,直接在变量名称之前   一个inout参数,表示它可以被修改   功能

func swapTwoInts(inout a: Int, inout _ b: Int) {
    let temporaryA = a
    a = b
    b = temporaryA
}

var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt)
print("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
// prints "someInt is now 107, and anotherInt is now 3"

答案 1 :(得分:0)

我认为Swift中最接近的是inout个变量。它们在Swift中被允许作为构造函数参数(但将它们保存到变量会阻止它们工作):

class Demo {
    var value: Double

    init(inout value: Double) {
        value++
        self.value = value
    }
}

var value = 1.0
let demo = Demo(value: &value)
print(value) // 2.0

demo.value++
print(value) // 2.0

因此,我不相信您想要的语法是可能的。但是,如果您可以重新解决问题,则inout参数可能会替代。