UserDefaults.standard.Integer 不适用于数字 (Swift 5)



我在UserDefaults中保存一个计数,并用viewDidPear 加载

保存在此处:

UserDefaults.standard.set(JSon.runways.count, forKey: "RunwaysCount")

并且通过print((函数检查保存期间的数字是否正确。

然后在viewDidPear下,我检查这个号码:

if UserDefaults.standard.object(forKey: "RunwaysCount") == nil
{
self.viewRunway1.isHidden = true
self.viewRunway2.isHidden = true
print("Runways Count == nil")
}
else
{
let Number = UserDefaults.standard.integer(forKey: "RunwaysCount")
print(Number)
if Number == 1
{
self.viewRunway1.isHidden = false
self.viewRunway2.isHidden = true
}
else if Number == 2
{
self.viewRunway1.isHidden = false
self.viewRunway2.isHidden = false
}
else
{
print("Error checking number"
}
}

数字在我的控制台中打印为正确的数字,但它没有通过number==功能,每次都会通过其他功能并打印"错误检查数字">

我将xCode 11与Swift 5一起使用。

设法用以下方法修复了它:

if let RunwayCount = UserDefaults.standard.object(forKey: "RunwaysCount") as? IntegerLiteralType
{
print(RunwayCount)
if RunwayCount == 1
{
self.viewRunway1.isHidden = false
self.viewRunway2.isHidden = true
print("Working Integer 1")
}
if RunwayCount == 2
{
self.viewRunway1.isHidden = false
self.viewRunway2.isHidden = false
print("Working Integer 2")
}
}

我仍然不清楚为什么以前的方法不起作用,但这段代码修复了它

标量类型,如UserDefaults中的Int, DoubleBool,设计用于在没有键的情况下返回默认值(0、0.0和false(。

你可以利用这种行为

let runwayCount = UserDefaults.standard.integer(forKey: "RunwaysCount")
print(runwayCount)
switch runwayCount {
case 0:
self.viewRunway1.isHidden = true
self.viewRunway2.isHidden = true
print("Runways Count == 0")
case 1:
self.viewRunway1.isHidden = false
self.viewRunway2.isHidden = true
case 2:
self.viewRunway1.isHidden = false
self.viewRunway2.isHidden = false
default:
print("Error checking number")
}
}

最新更新