我想在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
这可能吗?
答案 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参数可能会替代。