我第一次加载我的应用程序时需要在我的设置中设置一些值,但是当我加载设置时,应用程序崩溃,因为我的设置试图用当前值填充自己...所有这些都是一些nullpointer或其他什么。在这种特定情况下,我试图显示UIPickerView的内容。
var possibleDigit = Int(SettingsManager.shared.zoneVibrateCounts[0])
SettingsManager.shared.zoneVibrateCounts包含一个包含值的数组。首次加载时无论如何都不会填充数组。我需要的是能够在我尝试访问其数据之前检查SettingsManager.shared.zoneVibrateCounts是否有任何内容。我该怎么办?是否需要更多代码?
修改
这是声明我的arrayOfZoneVibrations
var arrayOfZoneVibrations: [Int]!
雅
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView.tag == 1
{
SettingsManager.shared.timerDelay = row + 1
timerDelayTextField.text = getTitle(row)
timerDelayTextField.resignFirstResponder()
}
else
{
arrayOfZoneVibrations[pickerView.tag - 2] = row + 1
SettingsManager.shared.zoneVibrateCounts = arrayOfZoneVibrations
}
}
以下是我访问SettingsManager部分的方法
var zoneVibrateCounts: [Int] {
get {
return uDefaults.array(forKey: ZONES) as? [Int] ?? [Int]()
}
set (value) {
uDefaults.set(value, forKey: ZONES)
}
}
以下是ZONES的定义
private let ZONES = "zones"
答案 0 :(得分:1)
没有理由使用Int(SettingsManager.shared.zoneVibrateCounts[0])
,因为SettingsManager.shared.zoneVibrateCounts[0]
已经是Int
。所以这可以简单地写成:
var possibleDigit = SettingsManager.shared.zoneVibrateCounts[0]
现在,由于SettingsManager.shared.zoneVibrateCounts
可能是一个空数组,因此您需要避免直接访问不存在的索引。
如果您只是想要一些默认值(例如0
),如果数组为空,那么您应该这样做:
var possibleDigit = SettingsManager.shared.zoneVibrateCounts.first ?? 0
您可以随意替换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