Swift - 在多个视图中初始化具有属性的模型对象

时间:2017-12-14 18:09:58

标签: ios swift model-view-controller properties model

客户端希望我初始化模型对象,但我面临的问题是我需要的属性位于五个视图控制器之间。在视图控制器1中,我为我的对象定义了propertyA。视图控制器2我定义了propertyB,依此类推。在最后的视图中,我看到了我所选择的内容的摘要,从那里我可以最终创建我的对象。

我正在做这个令人难以置信的长时间和低效率,此时我在许多视图中为每个属性提供相同的可选变量。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

对于这种情况,您应该尝试使用Singleton模式

  1. 创建具有所有属性的类并创建其单例:

    using (MemoryStream workStream = new MemoryStream())
                {
                    using (Document document = new Document())
                    {
                        using (PdfWriter writer = PdfWriter.GetInstance(document, workStream))
                        {
                            HeaderFooter headerfooter = new HeaderFooter();
                            headerfooter.watermarkpage = WaterMarkPage;
                            headerfooter.includefooter = IncludeFooter;
                            writer.PageEvent = headerfooter;
                            writer.CloseStream = false;
                            document.Open();
                            PdfContentByte cb = writer.DirectContent;
                                foreach (TestResult testresultdata in testresults)
                                {
                                    document.Add(PopulateData(testresultdata, reporttitle, includesponsordata));
                                    // Move to next page
                                    document.NewPage();
                                } // end foreach Order
                            document.Close();
                        } // end writer
                    } // end document
              }
    
  2. 要设置不同-2视图控制器中的值,请遵循以下模式。这里我假设您可以在视图控制器中的任何位置设置属性。现在我正在考虑public class Property { public var propertyA:AnyObject? /// define your appropriate data type public var propertyB:AnyObject? public var propertyC:AnyObject? public var propertyD:AnyObject? public var propertyE:AnyObject? static let sharedInstance = Property() } 您可以将值更改为视图控制器的任何部分

    viewDidLoad

  3. 最后,您将获得所有已分配参数的值

    class ViewController1: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            Property.sharedInstance.propertyA = "X" as AnyObject //// Value should be of same data type of propertyA
        }
    }
    
    class ViewController2: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            Property.sharedInstance.propertyB = "Y" as AnyObject //// Value should be of same data type of propertyA
        }
    }