【发布时间】: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