通过引用返回swift

通过引用返回swift,swift,Swift,以以下为例: struct Foo { var bar: Int = 0 } func getBar (forFoo foo: Foo) -> Int { return foo.bar } let foo = Foo() var bar = getBar(forFoo: foo) bar = 1 print("foo.bar: \(foo.bar)") 在getBar中,我希望能够返回对foo.bar的引用,以便当我修改bar时,它会更改foo.bar的值,而不仅仅是

以以下为例:

struct Foo {
    var bar: Int = 0
}

func getBar (forFoo foo: Foo) -> Int {
    return foo.bar
}

let foo = Foo()
var bar = getBar(forFoo: foo)
bar = 1
print("foo.bar: \(foo.bar)")
getBar
中,我希望能够返回对
foo.bar
的引用,以便当我修改
bar
时,它会更改
foo.bar
的值,而不仅仅是
bar


我该怎么做呢?

在对它进行了一点尝试之后,它看起来好像
NSNumber
实际上也不能满足您的需要,因此您需要编写自己的自定义包装器。例如:

struct Foo {
    let bar = IntWrapper(0)
}

class IntWrapper {
    var value: Int
    init (_ value: Int) {
        self.value = value
    }
}    

func getBar (forFoo foo: Foo) -> IntWrapper {
    return foo.bar
}

let foo = Foo()
let bar = getBar(forFoo: foo)
bar.value = 1
print("foo.bar: \(foo.bar.value)") // prints 1

请注意,我将一些
var
s更改为
let
,因为如果要更改引用本身,您只需要在引用类型上使用
var

int是一个结构,因此它不是引用类型,但NSNumber是您不能使用的。如果需要引用,则必须使用引用类型。最好使用像NSNumber这样的包装类。好的,谢谢。结构也不能这样做吗?不,结构是值类型。但是,如果结构的一个属性是类,您仍然可以获得对它的引用。但是,在某个时候,如果不使用类,就无法做到这一点。好的,谢谢你的帮助:)