我有一个UITableViewController,它是一个UIViewController。我制作了一个全局counter
来跟踪UITableView中选择的行。因为根据选择的行,所呈现的UIViewController中的某些信息会发生变化。
我认为有可能整理它,以便dayx
segue只需要调用一次,counter
可以相应地改变,具体取决于选择哪一行?但我很难搞清楚。
这是我现在拥有的,它有效,但看起来很乱?
//what happens when row is selected
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.row == 0 {
counter = 0
self.performSegue(withIdentifier: "dayx", sender: self)
} else if indexPath.row == 1 {
counter = 1
self.performSegue(withIdentifier: "dayx", sender: self)
}
else if indexPath.row == 2 {
counter = 2
self.performSegue(withIdentifier: "dayx", sender: self)
}
else if indexPath.row == 3 {
counter = 3
self.performSegue(withIdentifier: "dayx", sender: self)
}
else if indexPath.row == 4 {
counter = 4
self.performSegue(withIdentifier: "dayx", sender: self)
}
else if indexPath.row == 5 {
counter = 5
self.performSegue(withIdentifier: "dayx", sender: self)
}
else if indexPath.row == 6 {
counter = 6
self.performSegue(withIdentifier: "dayx", sender: self)
}
}
使用flatMap
:
Swift 4.0
indexPath.flatMap {
print($0)
counter = $0
self.performSegue(withIdentifier: "dayx", sender: self)
}
后来:
let _ = indexPath.compactMap {
counter = $0
self.performSegue(withIdentifier: "dayx", sender: self)
}
要了解flatMap
的基础知识。阅读这篇文章Replacing flatMap With compactMap
如果你的所有行都打算做performSegue
。简单:
//what happens when row is selected
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
counter = indexPath.row
self.performSegue(withIdentifier: "dayx", sender: self)
}