Ios 初始化前使用的变量
我对此有点问题Ios 初始化前使用的变量,ios,swift,Ios,Swift,我对此有点问题 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { let destViewController = segue.destinationViewController as! SecondTableViewController var secondArrays : SecondTableData if let indexPath = self.tabl
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
初始化之前使用的第二个数组
为什么我会犯这样的错误?请帮帮我,只是一个有斯威夫特的新手。TIA您将出现错误,因为如果let失败,则可以在不进行任何初始化的情况下使用
secondarray
尝试以下逻辑:
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
}
这是因为在Swift中初始化变量的方式,在Swift类中,每个属性在使用之前都需要一些默认值 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
}
}
您可以将
secondarray
的类型更改为隐式展开的可选(SecondTableData!
)类型,这样可以消除生成时错误。注意:如果变量未初始化,并且您尝试访问它,则会引发运行时错误
另外,如果您将变量更改为a
let
,此方法将不起作用。您是否一步一步地运行它,它是否会进入if{}?如果if let indexath=self.tableView.indexPathForSelectedRow
失败,则secondArrays
仍将未初始化。因此,编译器给出了这个警告。可能是重复的,因为如果{}实际对象被分配给它,它可能不会进入内部,对吗?