我试图只在打开应用程序时运行一次函数。
背景
我有一个用户默认值的存储数组(我们称之为storedArray),它从用户可以修改的数组(userArray)中获取值。
问题1:每次打开应用程序时,storedArray都有以前会话的值,当然userArray再次为空。因此,当storedArray再次从userArray中获取值时,storedArrays将丢失其以前的值。
问题1的解决方案:打开应用程序时,userArray将填充storedArray的值(来自上一个会话)。
没问题。现在:
**问题2:**每次打开应用程序时,这种情况只能发生一次,否则userArray将开始用重复的值多次附加storedArray值。我找到了解决方案1和2,3我试图遵循其他帖子的建议,但未能理解并实施
可能的解决方案1:声明全局变量
Struct globalVariables{
static var x = 0
}
创建一个if语句,以便所需代码仅在globalVariables.x==0 时运行
if globalVariables.x == 0 {
//code to append values from storedArray to userArray goes here
//Then give a new value to globalVariables.x so that the if never gets accessed again
globalVariables.x == 1
}
这是有效的,但我不知道这是否是一个好的做法。
可能的解决方案2:将要运行的代码只放入AppDelegate文件中的应用程序函数中一次。
这个函数看起来是这样的。
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//code to append values from storedArray to userArray goes here
}
这同样有效,但我不知道这是否是一个好的做法。
可能的解决方案3:如果我理解正确,其他帖子中建议的解决方案是使用singleton。我从来没有真正做到这一点,(或者正确理解什么是单身汉)。
我制作了一个新的.swift文件,代码如下:
struct Service {
static let sharedInstance = Service(
func getStoredInfo () {
//code to append values from storedArray to userArray goes here
}
}
}
然后在视图中调用此函数DidLoad,使用:
Service.sharedInstance.getStoredInfo()
该函数仍然在每次运行viewDidLoad时被调用。如果singleton真的能帮助我做到这一点,我完全错过了关于什么是singleton以及如何实现它的一些非常基本的东西。
解决方案1和2是否为良好做法?也许还有其他解决方案?
谢谢!
如果只有在启动后才需要执行某些操作,那么"application didFinishLaunchingWithOptions"无疑是最佳选择。
问题:在iOS上,您无法控制应用程序何时终止。你需要存储应用程序是如何终止的,这样你就可以恢复会话或启动新的会话。