Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在不崩溃的情况下处理首次加载时的设置_Ios_Swift - Fatal编程技术网

Ios 如何在不崩溃的情况下处理首次加载时的设置

Ios 如何在不崩溃的情况下处理首次加载时的设置,ios,swift,Ios,Swift,第一次加载应用程序时,我需要在设置中设置一些值,但在加载设置时,应用程序崩溃,因为我的设置试图用当前值填充自己。。。所有这些都是某种空指针之类的东西。在这种特定情况下,我试图显示UIPickerView的内容 var possibleDigit = Int(SettingsManager.shared.zoneVibrateCounts[0]) SettingsManager.shared.ZoneVibratedCounts包含一个充满值的数组。在第一次加载时,阵列不会以任何方式填充。我需

第一次加载应用程序时,我需要在设置中设置一些值,但在加载设置时,应用程序崩溃,因为我的设置试图用当前值填充自己。。。所有这些都是某种空指针之类的东西。在这种特定情况下,我试图显示UIPickerView的内容

 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]的值