【问题标题】:Error in count Object Array计数对象数组错误
【发布时间】:2019-01-03 01:10:22
【问题描述】:

我有这个代码:

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_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)

如何解决?

【问题讨论】:

  • 你从来没有调用过 setCalculators 这就是为什么它是空的
  • 你有Java背景吗?
  • 我强烈建议不要使用 -1 作为默认值或标记值。 Swift 有选项,Int? 可以是nil。充分利用这一点。它可以防止你不小心用-1 索引到一个数组并让你的程序崩溃。
  • 您不需要也不应该编写手动 getter 和 setter 函数来包装存储的属性。存储的属性已经合成了一个支持实例变量,以及在您读取/写入它时隐式使用的 getter/setter 函数。 stackoverflow.com/a/34006746/3141234
  • 一般来说,在nil 可选数组上使用空数组更简单。这是否适合您的数据模型?

标签: swift


【解决方案1】:

首先,正确打开包装:

func numberOfCalculators()->Int{
    return activeCalculatorsArray?.count ?? 0
}

public func countCalculators()->Int {
    return calculators?.count ?? 0 // Suggested by Alexander
}

那你需要set something before calling get。所以在viewDidLoad而不是先调用numberOfCalculators()调用setCalculators(),这样你就会对计算器有一些价值。

【讨论】:

  • calculators?.count ?? 0
【解决方案2】:

根据您提供的信息,在您阅读时,calculators 似乎为零。你可能想做一些检查,它在你的 getCalculators 方法中看到......

guard let calcs = self.calculators else {
    print("No calculcators!")
    return [] // returns empty (no crash)
}

return calcs // return values

与此同时,最好先调查一下为什么您没有任何计算器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 2010-11-10
    • 2016-11-28
    • 1970-01-01
    • 2021-03-25
    • 2014-11-25
    • 2019-02-15
    相关资源
    最近更新 更多