Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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/9/blackberry/2.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
Swift 计数对象数组中出现错误_Swift - Fatal编程技术网

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