Ios 如何在不崩溃的情况下处理首次加载时的设置
第一次加载应用程序时,我需要在设置中设置一些值,但在加载设置时,应用程序崩溃,因为我的设置试图用当前值填充自己。。。所有这些都是某种空指针之类的东西。在这种特定情况下,我试图显示UIPickerView的内容Ios 如何在不崩溃的情况下处理首次加载时的设置,ios,swift,Ios,Swift,第一次加载应用程序时,我需要在设置中设置一些值,但在加载设置时,应用程序崩溃,因为我的设置试图用当前值填充自己。。。所有这些都是某种空指针之类的东西。在这种特定情况下,我试图显示UIPickerView的内容 var possibleDigit = Int(SettingsManager.shared.zoneVibrateCounts[0]) SettingsManager.shared.ZoneVibratedCounts包含一个充满值的数组。在第一次加载时,阵列不会以任何方式填充。我需
var possibleDigit = Int(SettingsManager.shared.zoneVibrateCounts[0])
SettingsManager.shared.ZoneVibratedCounts包含一个充满值的数组。在第一次加载时,阵列不会以任何方式填充。我需要的是在尝试访问SettingsManager.shared.ZoneVibratedCounts的数据之前,能够检查其是否包含任何内容。我怎么能做这样的事?是否需要更多的代码
编辑
这是我的阵列分区校准
var arrayOfZoneVibrations: [Int]!
嗯
下面是访问设置管理器部分的方法
var zoneVibrateCounts: [Int] {
get {
return uDefaults.array(forKey: ZONES) as? [Int] ?? [Int]()
}
set (value) {
uDefaults.set(value, forKey: ZONES)
}
}
这是分区的定义
private let ZONES = "zones"
没有理由使用
Int(SettingsManager.shared.ZoneVibratedCounts[0])
,因为SettingsManager.shared.ZoneVibratedCounts[0]
已经是Int
。因此,可以简单地写为:
var possibleDigit = SettingsManager.shared.zoneVibrateCounts[0]
现在,由于SettingsManager.shared.ZoneVibratedCounts
可能是空数组,因此需要避免直接访问不存在的索引
如果数组为空,您只需要一些默认值(如0
),则应执行以下操作:
var possibleDigit = SettingsManager.shared.zoneVibrateCounts.first ?? 0
if let firstCount = SettingsManager.shared.zoneVibrateCounts.first {
// do something with firstCount
} else {
// the array is empty, act accordingly
}
您可以随意将??
后面的0
替换为对您的应用程序有意义的任何默认值
如果不希望使用默认值,而是希望在错误为空时采取不同的操作,则应执行以下操作:
var possibleDigit = SettingsManager.shared.zoneVibrateCounts.first ?? 0
if let firstCount = SettingsManager.shared.zoneVibrateCounts.first {
// do something with firstCount
} else {
// the array is empty, act accordingly
}
或者你可以:
guard let firstCount = SettingsManager.shared.zoneVibrateCounts.first else {
return
}
// do something with firstCount
如果您使用的是
UserDefaults
,请查看registerDefaults
方法。您的ZoneVibratedCounts
数组中有哪些类型的值?如果您需要为任何值创建一个Int
,为什么它还不是一个Int
数组?对不起,我只是个初学者。它是一个整数的值。。根据谷歌的一些样本,这看起来像是守卫或者让我选择,但我得到了这个错误。条件绑定的初始值设定项必须具有可选类型,而不是“Int”。如果ZoneVibratedCounts
是Int
的数组,那么为什么要尝试从Int
创建Int
?可能的做法是以Int格式获取ZoneVibratedCounts[0]的值