最佳实践是只运行一次代码,并且只在打开应用程序时运行.Swift 4,Xcode 8



我试图只在打开应用程序时运行一次函数。

背景

我有一个用户默认值的存储数组(我们称之为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上,您无法控制应用程序何时终止。你需要存储应用程序是如何终止的,这样你就可以恢复会话或启动新的会话。

相关内容

  • 没有找到相关文章

最新更新