[英]variable used before being initialized
我有这个问题
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
这是因为在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
}
}
您将secondArrays
错误,因为如果您的if let
失败,则可以在没有任何初始化的情况下使用secondArrays
。
尝试以下逻辑:
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
}
你可以将secondArrays
的类型更改为隐式解包的可选( SecondTableData!
),这应该摆脱构建时错误。 请注意,如果未初始化变量并且您尝试访问它,则会引发运行时错误
同样,如果你改变了变量为let
这个方法是行不通的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.