如何在TableView中使用prepareForSegue传递数据?

时间:2016-02-21 19:07:50

标签: swift uitableview segue

尝试设置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]
            }

        }
}

3 个答案:

答案 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]
            }
        }

希望这可以解决您的问题。