沮丧任何?到 UIBarButtonItem

Downcasting Any? to UIBarButtonItem

override func prepare(for segue: UIStoryboardSegue, sender:
        Any?) {
    if segue.identifier == "detailSegue" {
        let indexPath = tableView.indexPathForSelectedRow!
        let card = cards[indexPath.row]
        let detailTableViewController = segue.destination as! DetailTableViewController
        detailTableViewController.card = card
        detailTableViewController.picture = card.image
    } else if segue.identifier == "addEditSegue" {
        let addEditTableViewController = segue.destination as! AddEditTableViewController
        let buttonPressed = sender as? UIBarButtonItem
        if buttonPressed == cardsAddButton {
            addEditTableViewController.isNewCard = true
        } else {
            addEditTableViewController.isNewCard = false
        }
    }
}

嗨,我是 Swift 的新手。我需要通过点击 UIBarButtonItem (cardsAddButton) 或点击 UITableView 的单元格来执行相同的 segue。使用 print 语句我发现当我点击 cardsAddButton 时 buttonPressed 为 nil。为什么?我应该如何检查发件人是什么?

你——开发者——应该知道 prepare(for 的发件人是谁。只有三种可能:

  1. 如果 segue 连接到 Interface Builder 中的 table 视图单元格 那么 sender 就是 UITableViewCell.
  2. 如果 segue 连接到 Interface Builder 中的 view controller 那么 sender 就是 UIViewController.
  3. 如果在代码中调用 performSegue,那么 sender 就是您在 sender 参数中传递的任何内容(包括 nil).

只有在按钮的 IBAction 中调用 performSegue 并将按钮实例作为 sender

传递,您的代码才能工作
@IBAction func addCard(_ sender : UIBarButtonItem)
{
    self.performSegue(withIdentifier:"addEditSegue", sender: sender)
}