Swift4秘诀:如何以更好的方式处理序列标识符

  func navigationToShowDetailController(){ 
self.performSegue(withIdentifier:“ showDetail”,发送者:nil)
} //标记:-Seguesoverride func prepare(用于segue:UIStoryboardSegue,发件人:任意?){
如果segue.identifier ==“ showDetail” {
如果让indexPath = tableView.indexPathForSelectedRow {
让object = objects [indexPath.row]为! NSDate
让controller =(segue.destination as!UINavigationController).topViewController as! DetailViewController
controller.detailItem =对象
controller.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
controller.navigationItem.leftItemsSupplementBackButton = true
}
}
}

由于我们使用字符串作为segue标识符,因此无需进行编译时检查,而且输入错误可能导致运行时崩溃。 此代码也很难推理。 例如,如果您错过了prepare(for:sender:)的segue标识符检查,会发生什么情况

当代码中存在多个问题时,情况将变得更加糟糕。

解决方案:将segue标识符定义为枚举,并享受强大的数据类型带来的所有好处。

 枚举SegueIndentifier:字符串{ 
case showDetail =“ showDetail”
} //标记:-Seguesoverride func prepare(用于segue:UIStoryboardSegue,发件人:任意?){
警卫队让identString = segue.identifier,让标识符= SegueIdentifier(rawValue:identString)else {
super.prepare(用于:segue,发件人:sender)
返回
}开关标识符{
案例.showDetail:
如果让indexPath = tableView.indexPathForSelectedRow {
让object = objects [indexPath.row]为! NSDate
让controller =(segue.destination as!UINavigationController).topViewController as! DetailViewController
controller.detailItem =对象
controller.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
controller.navigationItem.leftItemsSupplementBackButton = true
}
}
}