我收到此错误:
1:https://i.stack.imgur.com/RMsHY.png
有人知道如何解决此问题吗?谢谢!
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
let hasSession = UserDefaults.standard.value(forKey: "UserHasSubmittedPassword") ?? false
let vc: UIViewController = {
if hasSession {
// next vc you want to show
} else {
// enter password vc
}
}()
let navigationController = UINavigationController(rootViewController: vc)
window?.rootViewController = navigationController
window?.makeKeyAndVisible()
return true
}
答案 0 :(得分:1)
UserDefaults类具有根据其类型检索对象的特定方法。
对于布尔值,您可以使用:
UserDefaults.standard.bool(forKey: "UserHasSubmittedPassword")
从文档中:
此方法会自动强制某些“真实”值,例如 字符串“ true”,“ YES”和“ 1”,以及数字1和1.0- 布尔值true。某些“虚假”值也是如此,例如 如字符串“ false”,“ NO”和“ 0”,以及数字0和0.0,其中 被自动强制为布尔值false。
和:
与指定键关联的布尔值。如果指定 键不存在,此方法返回false。
这意味着您还不需要在示例代码中使用nil合并运算符??
,因为如果键不存在,则使用方法UserDefaults.standard.bool(forKey:)
已经返回false。 / p>
因此在您的示例代码中,您可以使用:
let hasSession: Bool = UserDefaults.standard.bool(forKey: "UserHasSubmittedPassword")
如果您还想读取其他类型的值,则UserDefaults类还具有用于读取String,URL,Array,Dictionary,Int,Float,Double等的特定方法。
完整列表可在此处找到:https://developer.apple.com/documentation/foundation/userdefaults
答案 1 :(得分:0)
尝试使用:
a[a < 2]
由于您要获取布尔值。
答案 2 :(得分:0)
切勿使用value(forKey:
中的UserDefaults
来获取单个值。对于标量类型,有object(forKey:
和特殊的API,例如bool(forKey:)
,integer(forKey:)
和double(forKey:)
由于vc
用作局部变量,因此使用闭包语法进行声明是不合适的。
只需直接检查UserDefaults
中的布尔值。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
let vc : UIViewController
if UserDefaults.standard.bool(forKey: "UserHasSubmittedPassword") {
vc = <next vc you want to show>
} else {
vc = <enter password vc>
}
let navigationController = UINavigationController(rootViewController: vc)
window?.rootViewController = navigationController
window?.makeKeyAndVisible()
return true
}
在关闭密码vc后,不要忘记为密钥true
保存UserHasSubmittedPassword
。
答案 3 :(得分:-1)
@FoodDreams您可以尝试一下,希望它对您有帮助!
无论您在哪里设置,都首先像这样设置UserDefaults值
UserDefaults.standard.set(true, forKey: "yourkeyname")
UserDefaults.standard.synchronize()
在AppDelegate中编写以下函数,然后调用didFinishLaunching方法
func setupRootVC()
{
var rootVC = UIViewController()
if (UserDefaults.standard.value(forKey: "yourKey") as? Bool) != nil
{
rootVC = UIStoryboard.Dashboard.instantiateViewController(withIdentifier: "HomeVC") as! HomeVC
}
else
{
rootVC = UIStoryboard.Login.instantiateViewController(withIdentifier: "ChangePasswordVC") as! ChangePasswordVC
}
let rootNC = UINavigationController(rootViewController: rootVC)
//all your further code
}