Ios 初始声明后未更新结构的值

Ios 初始声明后未更新结构的值,ios,swift,Ios,Swift,我正在尝试制作一个专门的计算应用程序,但在几天前启动这个项目之前,我绝对没有swift或iOS开发的经验,也没有Java方面的经验 我试图将结构变量从一个视图控制器传递到另一个视图控制器,然后通过实例化获得这些变量 以下是包含结构的代码: struct SSDCalcs { var patientInput: String var siteInput: String var scriptInput:

我正在尝试制作一个专门的计算应用程序,但在几天前启动这个项目之前,我绝对没有swift或iOS开发的经验,也没有Java方面的经验

我试图将结构变量从一个视图控制器传递到另一个视图控制器,然后通过实例化获得这些变量

以下是包含结构的代码:

            struct SSDCalcs {
            var patientInput: String
            var siteInput: String
            var scriptInput: Double
            var depthInput: Double
            var fieldInput: Double
            var length: Double
            var width: Double
            var squareInput: Double
        }

        //Change values of struct when enter key pressed
        @IBAction func enterPressed(_ sender: Any) {
                calcResults = SSDCalcs(patientInput: patientID.text!, siteInput: "fdfadsf", scriptInput: 5.0, depthInput: 6.0, fieldInput: 7.0, length: 8.0, width: 9.0, squareInput: 15.0)
       }


    //Initial delcaration of struct values (So the results page class doesn't complain about "calcResults" not yet existing"
    var calcResults = SSDCalcs(patientInput: "Error: Wrong struct values", siteInput: "Error", scriptInput: 0.0, depthInput: 0.0, fieldInput: 0.0, length: 0.0, width: 0.0, squareInput: 0.0)

}
这是另一个类的结果页代码:

func setValues() {
    var SSDCalcs = SSDCalculation().calcResults
    self.SSDPatientRef.text = "Patient ID: " + SSDCalcs.patientInput
    self.SSDSiteRef.text = "Treatment Site: " + SSDCalcs.siteInput
    self.SSDScriptRef.text = "Script (cGy): " + String(SSDCalcs.scriptInput)
    self.SSDDepthRef.text = "Depth: " + String(SSDCalcs.depthInput)
    self.SSDFieldRef.text = "Field Size: " + String(SSDCalcs.fieldInput)
    self.SSDLengthRef.text = "Length: " + String(SSDCalcs.length)
    self.SSDWidthRef.text = "Width: " + String(SSDCalcs.width)
    self.SSDSqrRef.text = "Equivalent Square: " + String(SSDCalcs.squareInput)
}
编译或运行代码时未给出任何错误。。。只要在输入字段的页面上按下“回车”键,它似乎就不会自动更新。 根据xcode调试器(断点是有效的),当按下enter ui按钮时,方法确实会激活,值会更改,但当显示在结果页面上时,假定的更改消失了,而它们会显示初始声明值

我认为,当加载新视图时,可能会删除数据。。。但我不知道如何避开它

任何帮助都将不胜感激

Swift结构是值类型:

值类型是一种类型,其值在指定给 变量或常量,或将其传递给函数时

这就是为什么在传递的结构实例上应用的更改不会影响该结构的原始实例

有关更多信息,请查看Swift上的结构

结构和枚举是类型中的值,类是引用类型

Swift整数、浮点数、布尔值、字符串、数组和字典中的所有基本类型都是值类型,并在后台实现为结构。

这一行:

var SSDCalcs = SSDCalculation().calcResults

始终创建具有初始结果的SSDCalculation结构的新实例。它不引用您可能已经创建的任何其他实例。

我如何具体引用新创建的值?它是否存储在一个数组中,类似于您在java中创建一个新对象时,以及具体引用该对象的内容?在您的情况下,您可以通过将结构设置为类来解决这个问题,但是,如果将结构更改为类,您将丢失Memberwise初始值设定项,您需要自己编写它。虽然所有这些都是事实,但它不会解决问题,因为您总是创建结构的新实例,然后获取默认值。我认为您需要引用已在其他地方创建的实例。是否可以引用新创建的实例?您的意思是要从第二个视图控制器引用第一个控制器中的实例?第一个视图控制器中有数据,我将其存储在结构中。最后,数据应该在第二个视图控制器中引用并从该引用中使用,所以是的。如果您确定每个视图控制器中只有一个,那么可以使用一个静态(类)变量,有点像下面的
static public calcsVar=SSDCalcs()
您可以在任何地方访问该表单,如“FirstController.calcsVar”。否则,您需要创建一个更全面的数据模型,该模型由能够访问每个视图控制器的对象控制。如果您选择静态变量路径,则选择“是”。另外,我最初的定义应该是
静态公共变量calcsVar=SSDCalcs()
,作为旁注,在
+
操作符(
“Width:\(SSDCalcs.Width)
)上使用字符串插值(
“Width:”+string(SSDCalcs.Width)
)可以获得更快的编译时间,您不必显式地使用
字符串
构造函数