尝试设置indexPath时出错:条件绑定的初始化程序必须具有可选类型
override func prepareForSegue(segue: UIStoryboardSegue,
sender: AnyObject?) {
if segue.identifier == "toStation" {
let detailViewController = segue.destinationViewController
as! toStation
if let indexPath = tableView.indexPathForSelectedRow! {
detailViewController.selectedStation = stationNameArray[indexPath.row]
}
}
}
答案 0 :(得分:0)
if let indexPath = tableView.indexPathForSelectedRow!
您正在将indexPathForSelectedRow绑定到indexPath视图,并使用if语句来解包可选的indexPathForSelectedRow。这是一个很好的方法。但与此同时,你正在使用爆炸声明!打开可选项。实际上,你打开两次可选项。要么用!或if if let statement。
答案 1 :(得分:0)
您收到此错误是因为tableView.indexPathForSelectedRow!
不再是可选值(您已将其解包)。要解决此错误,请尝试在!
末尾删除强制解包运算符if let
。
if let indexPath = tableView.indexPathForSelectedRow { ... }
答案 2 :(得分:0)
根据您的问题主题,我认为您尝试将Indexpath传递到prepareForSegue
,在您的情况下,您可以使用didSelectRowAtIndexPath
传递sender
:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.performSegueWithIdentifier("toStation", sender: indexPath);
}
然后在prepareForSegue
:
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if (segue.identifier == "toStation") {
let detailViewController = segue.destinationViewController
as! toStation
let row = (sender as! NSIndexPath).row; //we know that sender is an NSIndexPath here.
detailViewController.selectedStation = stationNameArray[row]
}
}
希望这可以解决您的问题。