最佳实践对背部或关闭的水龙头加载页面:在SWIFT 3

问题描述:

我有一个纯动态页面page1VC(这是父),我有几个按钮,这将他们带到page2VC,page3VC,page4VC最佳实践对背部或关闭的水龙头加载页面:在SWIFT 3

有下一个按钮和后退按钮在每一个视图控制器(在p1VC没有后退按钮,因为这是亲本)

我可以从任何其它的VC即导航到任何的viewController,从p1VC - > p2VC - > p4VC - > p3Vc

在任何视图控制器后面的水龙头,需要我p1VC

page1VC获取所有信息,从API并存储在变量p1APIInfo显示

在从page2VC或page3VC或page4VC后退按钮的水龙头 - >这应该带我去page1VC

我的问题是: 由于我page1VC是纯粹的动态,在这个页面的第一次着陆,我从API获取所有信息 当我导航到page4VC,并在后面的水龙头,它应该带我到page1VC,在这里我不想让API随时调用当用户点击返回按钮

截至目前,我在page1VC中有一个虚拟变量,它是p1APIInfo变量的副本(比如dummyAPIInfo)

每当我点击下一个im时,将该变量传递给另一个VC,并从该VC的后退点击im回传该变量。所以基本上这个变量只是将数据传输到其他VC,并通过点击“返回”按钮返回到page1VC。我没有在这个虚拟变量中使用page2VC/page3VC/page4VC中的任何数据

但是,这有效,但这不是最佳实践。

我能想到救了我的第1页数据userdefaults /单,但即时寻找更优化的解决方案

请的建议如何处理

因此,要总结:我希望我的API调用来仅出现一次,即,在第一次登陆..此后每当用户访问/点击从其他页面的按钮,我需要一种方式不要调用API。它应该使用用户在第一次API调用期间获得的相同数据。

希望我清楚我的问题。建议

请确保您在未被多次调用的函数中执行调用。例如,如果您的API调用方法是viewWillAppear,则每次弹出导航堆栈时都会执行提取操作。将API调用放入viewDidLoad将确保您的API调用只发生一次。

至于将数据传输回第1页的方法...

  • 您可以创建一个第1页依赖于自定义模型,并注入该模型

    其他页面
  • 你可以使用委托模式回传信息

  • 您可以使用通知和观察员广播并捕获更新

  • 您可以将page1的引用传递给任何其他页面,并允许其他页面代表它对page1进行更新

所有4种策略都是可行的,真正取决于您的用例以及您的应用中需要的其他东西。你甚至可以使用单身。尽管如此,UserDefaults似乎是一个坏主意,因为你的用例是更新视图控制器的模型。