嘿伙计我有这个问题
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let destViewController = segue.destinationViewController as! SecondTableViewController
var secondArrays : SecondTableData
if let indexPath = self.tableView.indexPathForSelectedRow {
secondArrays = secondArrayData[indexPath.row]
}
destViewController.secondArray = secondArrays.secondTitle
}
我在destViewController.secondArray = secondArrays.secondTitle中遇到错误 它说:在初始化之前使用的secondArrays,为什么我得到那个错误?请帮助,只是一个swift的新手。 TIA
答案 0 :(得分:10)
这是因为在Swift中初始化变量的方式,在Swift Class中,每个属性在使用之前都需要一些默认值。
Swift中的类初始化是一个两阶段的过程。在第一个 阶段,每个存储的属性由类分配初始值 介绍它。一旦每个存储属性的初始状态 已确定,第二阶段开始,每个班级都给出 有机会在之前进一步定制其存储的属性 新实例被认为可以使用了。
尝试更改您的代码,如下所示:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let destViewController = segue.destinationViewController as! SecondTableViewController
var secondArrays : SecondTableData?
if let indexPath = self.tableView.indexPathForSelectedRow {
secondArrays = secondArrayData[indexPath.row]
//Here you're making sure that the secondArrays would must have a value
destViewController.secondArray = secondArrays.secondTitle
}
}
答案 1 :(得分:3)
如果secondArrays
失败,您可能会在没有初始化的情况下使用if let
,从而导致错误。
尝试以下逻辑:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let destViewController = segue.destinationViewController as! SecondTableViewController
guard let indexPath = self.tableView.indexPathForSelectedRow else { return }
destViewController.secondArray = secondArrayData[indexPath.row].secondTitle
}
答案 2 :(得分:1)
您可以将secondArrays
的类型更改为隐式解包的可选(SecondTableData!
),这应该可以消除构建时错误。请注意,如果未初始化变量并且您尝试访问它,则会抛出运行时错误
另外,如果您将变量更改为let
,则此方法将无效。