Jon*_*ier 144
通常,您会向NSUserDefaults写一个值,以指示之前已启动的应用程序.
let launchedBefore = NSUserDefaults.standardUserDefaults().boolForKey("launchedBefore")
if launchedBefore {
print("Not first launch.")
}
else {
print("First launch, setting NSUserDefault.")
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "launchedBefore")
}
Run Code Online (Sandbox Code Playgroud)
更新 - 斯威夫特3
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")
}
Run Code Online (Sandbox Code Playgroud)
n13*_*n13 35
我总是需要这个,所以我把它放在一个类别中
一般用法:
let isFirstLaunch = UserDefaults.isFirstLaunch()
Run Code Online (Sandbox Code Playgroud)
AppDelegate中的用法
// use this if you need to refer to it later
var optionallyStoreTheFirstLaunchFlag = false
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
optionallyStoreTheFirstLaunchFlag = UserDefaults.isFirstLaunch()
// .. do whatever else
return true
}
Run Code Online (Sandbox Code Playgroud)
一些重要的考虑:
斯威夫特4
将以下内容放在UserDefaults + isFirstLaunch.swift中
extension UserDefaults {
// check for is first launch - only true on first invocation after app install, false on all further invocations
// Note: Store this value in AppDelegate if you have multiple places where you are checking for this flag
static func isFirstLaunch() -> Bool {
let hasBeenLaunchedBeforeFlag = "hasBeenLaunchedBeforeFlag"
let isFirstLaunch = !UserDefaults.standard.bool(forKey: hasBeenLaunchedBeforeFlag)
if (isFirstLaunch) {
UserDefaults.standard.set(true, forKey: hasBeenLaunchedBeforeFlag)
UserDefaults.standard.synchronize()
}
return isFirstLaunch
}
}
Run Code Online (Sandbox Code Playgroud)
我提炼了一点用户n13的答案
只需在任何地方使用它,UIApplication.isFirstLaunch()并确保在首次执行期间至少达到一次.
斯威夫特3
import UIKit
private var firstLaunch : Bool = false
extension UIApplication {
static func isFirstLaunch() -> Bool {
let firstLaunchFlag = "isFirstLaunchFlag"
let isFirstLaunch = UserDefaults.standard.string(forKey: firstLaunchFlag) == nil
if (isFirstLaunch) {
firstLaunch = isFirstLaunch
UserDefaults.standard.set("false", forKey: firstLaunchFlag)
UserDefaults.standard.synchronize()
}
return firstLaunch || isFirstLaunch
}
}
Run Code Online (Sandbox Code Playgroud)
斯威夫特2
import UIKit
private var firstLaunch : Bool = false
extension UIApplication {
static func isFirstLaunch() -> Bool {
let firstLaunchFlag = "isFirstLaunchFlag"
let isFirstLaunch = NSUserDefaults.standardUserDefaults().stringForKey(firstLaunchFlag) == nil
if (isFirstLaunch) {
firstLaunch = isFirstLaunch
NSUserDefaults.standardUserDefaults().setObject("false", forKey: firstLaunchFlag)
NSUserDefaults.standardUserDefaults().synchronize()
}
return firstLaunch || isFirstLaunch
}
}
Run Code Online (Sandbox Code Playgroud)
迅捷3
extension UserDefaults {
var hasLaunchBefore: Bool {
get {
return self.bool(forKey: #function)
}
set {
self.set(newValue, forKey: #function)
}
}
}
Run Code Online (Sandbox Code Playgroud)
Swift 5(属性包装器)
UserDefaultWrapper:
@propertyWrapper
struct UserDefaultWrapper<T> {
let key: String
let defaultValue: T
init(_ key: String, defaultValue: T) {
self.key = key
self.defaultValue = defaultValue
}
var wrappedValue: T {
get {
return UserDefaults.standard.object(forKey: key) as? T ?? defaultValue
}
set {
UserDefaults.standard.set(newValue, forKey: key)
}
}
}
Run Code Online (Sandbox Code Playgroud)
UserDefaultsStore:
struct UserDefaultsStore {
@UserDefaultWrapper("has_launch_before", defaultValue: false)
static var hasLaunchBefore: Bool
}
Run Code Online (Sandbox Code Playgroud)
用法:
UserDefaultsStore.hasLaunchBefore = false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46580 次 |
| 最近记录: |