我希望在用户首次打开我的应用程序时显示欢迎屏幕。有没有一种方法可以在Swift中检查应用程序的首次启动?
您可以在任何地方使用此代码来验证用户是否首次查看此视图。
func isAppAlreadyLaunchedOnce() -> Bool {
let defaults = UserDefaults.standard
if let _ = defaults.string(forKey: "isAppAlreadyLaunchedOnce") {
print("App already launched")
return true
} else {
defaults.set(true, forKey: "isAppAlreadyLaunchedOnce")
print("App launched first time")
return false
}
}
注意:在用户重新安装应用并首次启动后,该方法将返回false
。
func isAppAlreadyLaunchedOnce()->Bool{
let defaults = NSUserDefaults.standardUserDefaults()
if let isAppAlreadyLaunchedOnce = defaults.stringForKey("isAppAlreadyLaunchedOnce"){
println("App already launched")
return true
}else{
defaults.setBool(true, forKey: "isAppAlreadyLaunchedOnce")
println("App launched first time")
return false
}
}
由于应用程序的NSUserDefaults在卸载应用程序时被清除,因此您可以尝试在应用程序启动时测试特定值的存在。
如果该值存在,则该应用程序已经安装。如果不存在,则这是第一次启动该应用程序,并且您需要设置该值。
SWIFT :
let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore")
if launchedBefore {
print("Not first launch.")
} else {
print("First launch, setting UserDefault.")
UserDefaults.standard.set(true, forKey: "launchedBefore")
}
目标 - C:
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"isAppAlreadyLaunchedOnce"])
{
return true;
}
else
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isAppAlreadyLaunchedOnce"];
[[NSUserDefaults standardUserDefaults] synchronize];
return false;
}
Swift 5
let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore")
if launchedBefore {
// Code if has launched before
} else {
UserDefaults.standard.set(true, forKey: "launchedBefore")
// Code if not has launched before
}
userDefault
无法访问。因此,我改变了我的策略,使用以下方法检测首次启动。if ( fileExists( dummyFilePath ) == NO ) {
createFileAt( dummyFilePath )
// This is first launch
}
对Jonas Deichelmann的回答进行了轻微的语义修改,澄清了一些事情:
The print statements make clear that this function is only verifying if it has been run since last installation, not whether or not it has ever been run on this device.
func establishUserDefaultsHaveBeenVerifed()->Bool{
let defaults = UserDefaults.standard
if let _ = defaults.string(forKey: "userDefaultsHaveBeenVerified"){
print("user defaults were already verified")
return true
}else{
defaults.set(true, forKey: "userDefaultsHaveBeenVerified")
print("verified user defaults for first time since app was installed")
return false
}
}
Objective-C版本的Jon Shier's answer:
BOOL isAppLaunched = [[NSUserDefaults standardUserDefaults] boolForKey:@"launchedBefore"];
if (isAppLaunched) {
NSLog(@"Not first launch.");
}
else {
NSLog(@"First launch, setting NSUserDefault.");
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"launchedBefore"];
}
当你需要在非第一次会话时执行某些操作(例如,显示应用程序评分):
@UserDefault(key: UDKey.isFirstSession, defaultValue: true)
static var isFirstSession: Bool
func applicationWillTerminate(_ application: UIApplication) {
// When app is terminated, next sessions are not first anymore
UserDefaults.isFirstSession = false
}
@UserDefault是什么:
@propertyWrapper
struct UserDefault<Value> {
let key: String
let defaultValue: Value
var container: UserDefaults = .standard
var wrappedValue: Value {
get {
return container.object(forKey: key) as? Value ?? defaultValue
}
set {
container.set(newValue, forKey: key)
}
}
}
UDKey 是什么:
enum UDKey {
static let isFirstSession = "isFirstSession"
}