Swift 计数对象数组中出现错误
我有以下代码:Swift 计数对象数组中出现错误,swift,Swift,我有以下代码: var activeCalculators = Calculators() func numberOfCalculators()->Int{ let activeCalculatorsArray = activeCalculators.calculators return activeCalculatorsArray!.count } struct Calculators { var calculators: [Calc
var activeCalculators = Calculators()
func numberOfCalculators()->Int{
let activeCalculatorsArray = activeCalculators.calculators
return activeCalculatorsArray!.count
}
struct Calculators
{
var calculators: [Calculator]?
var activeCalculator: Int = -1
var activeSummary: Bool = false
var activeProfits: Bool = false
public func getCalculators()-> [Calculator]
{
return calculators!
}
public mutating func setCalculators(calculators: [Calculator])
{
self.calculators = calculators
}
public func getActiveCalculatorIndex()-> Int
{
return activeCalculator
}
public mutating func setActiveCalculatorIndex( activeCalculator: Int)
{
self.activeCalculator = activeCalculator
}
public func isActiveProfits()-> Bool
{
return activeProfits
}
public mutating func setActiveProfits( activeProfits: Bool)
{
self.activeProfits = activeProfits
}
public func isActiveSummary()-> Bool
{
return activeSummary
}
public mutating func setActiveSummary(activeSummary: Bool)
{
self.activeSummary = activeSummary
}
}
override func viewDidLoad() {
print("XXXXXXXXXXXX: \(numberOfCalculators())")
}
运行函数:numberOfCalculators()时,出现错误:
线程1:致命错误:在展开可选值时意外发现nil
我正在尝试将此函数添加到我的类:
public func countCalculators()->Int{
return (calculators?.count)!
}
但我有一个错误:
线程1:EXC_BAD_指令(代码=EXC_I386_INVOP,子代码=0x0)
如何修复它?首先,正确地打开它:
func numberOfCalculators()->Int{
return activeCalculatorsArray?.count ?? 0
}
public func countCalculators()->Int {
return calculators?.count ?? 0 // Suggested by Alexander
}
然后,您需要在调用get之前设置一些内容。因此,在
viewdiload
中,首先调用numberOfCalculators()
而不是调用setCalculators()
,这样您将对计算器有一些价值。根据您提供的信息,在阅读时,calculators
可能为零。您可能需要执行一些检查,请参见getCalculators
方法中的内容
guard let calcs = self.calculators else {
print("No calculcators!")
return [] // returns empty (no crash)
}
return calcs // return values
同时,最好先调查一下为什么你没有计算器。你从未调用过setCalculators,这就是为什么你没有Java背景?我强烈建议不要使用
-1
作为默认值或哨兵值。Swift有选项,Int?
可以是nil
。好好利用这一点。它将防止您意外地使用-1
索引到数组中,并使程序崩溃。您不需要也不应该编写手动getter和setter函数来包装存储的属性。存储的属性已经合成了一个支持实例变量以及getter/setter函数,这些函数在您对其进行读/写操作时隐式使用。通常,在nil
可选数组上使用空数组更简单。这很适合你的数据模型吗?计算器?.count??0