Swift中的按引用传递基元类型

Swift中的按引用传递基元类型,swift,pass-by-reference,primitive-types,Swift,Pass By Reference,Primitive Types,我正在尝试建立一个模型,该模型与它包含的对象共享一个值。在下面的示例中,我有一个模型对象a,它包含一个结构,b。我希望他们都能访问变量a和aa引用的Bool。为了做到这一点,我将Bool包装在Box结构中 struct Box<Value> { var value:Value } struct Model { var a: Box<Bool> var b:B struct B { var aa:Box<Bool>

我正在尝试建立一个模型,该模型与它包含的对象共享一个值。在下面的示例中,我有一个
模型
对象a,它包含一个
结构
,b。我希望他们都能访问变量a和aa引用的
Bool
。为了做到这一点,我将
Bool
包装在
Box
结构中

struct Box<Value> {
    var value:Value
}

struct Model {
    var a: Box<Bool>
    var b:B
    struct B {
        var aa:Box<Bool>
    }
}

struct TestView : View {
    @State var model:Model

    var body: some View {
        VStack {
            Text(model.a.value.description)
            Text(model.b.aa.value.description)

            Button(action: {
                self.model.a.value.toggle()
            }) {
                Text("Button")
            }
        }
    }
}
struct-Box{
var值:value
}
结构模型{
变量a:框
变量b:b
结构B{
变量aa:Box
}
}
结构测试视图:视图{
@状态var模型
var body:一些观点{
VStack{
文本(model.a.value.description)
文本(型号b.aa.值.说明)
按钮(操作:{
self.model.a.value.toggle()
}) {
文本(“按钮”)
}
}
}
}
但是,当我这样运行代码时:

let box = Box<Bool>(value: true)
let contentView = TestView(model: Model(a: box, b: Model.B(aa: box)))
let box=box(值:true)
让contentView=TestView(model:model(a:box,b:model.b(aa:box)))

model.b.aa中的值没有像我预期的那样更新。是否有其他方法可以执行此操作?

出于您的目的,您需要将基元类型包装在一个类中,并共享该类的一个实例。结构之间没有可以共享的原始引用或指针。

我应该在哪里添加“inout”?我的示例中没有任何方法。对不起。我误以为你在处理函数。出于您的目的,您需要将基元类型包装在一个类中,并共享该类的一个实例。结构之间没有可以共享的原始引用或指针。我明白了,如果我使用类而不是struct for Box,那么UI将不再更新,这是否与类在状态属性包装中的工作方式有关?您能否指定您试图实现的目标,这似乎非常复杂。可能是第一个您应该将其分解为更简单的解决方案。问题的实质是如何在两个对象之间共享一个基元类型,并在视图中更新基元类型更新