如何在swift中执行条件segue操作?

How to perform conditional segue operation in swift?

我正在尝试按照以下代码执行条件转场,如果用户 ID 与当前用户 ID 匹配,则仅执行转场但未按要求发生,它执行转场而不执行条件语句,调用函数 toChatView 条件必须为真

按钮位于 table 视图控制器的 table 单元格中,必须从那里调用操作

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) as! CommentCell


        cell.itemLikebutton.tag = indexPath.row
        cell.itemLikebutton.addTarget(self, action: #selector(likeaction1(_:)), for: .touchUpInside)


        cell.chatButton.tag = indexPath.row
        cell.chatButton.addTarget(self, action: #selector(toChatView(_:)), for: .touchUpInside)




            cell.set(comment: comments[indexPath.row])

        return cell


    }

       @IBAction func toChatView(_ sender: Any) {
        var currentUserId = Auth.auth().currentUser!.uid
        if currentUserId == userId1 || currentUserId == UserId2{

            performSegue(withIdentifier: "toMessageRoom", sender: self)

        }
        else{
            self.view.makeToast("You are not authorized for this chatroom")

        }


    }

现在我在 prepare func 中收到此错误

else if (segue.identifier == "toMessageRoom"){

            let chatbutton = sender as! UIButton
            let comment = comments[chatbutton.tag]
            var commentKey1 = comment._documentId
           var commentUserID  =  comment._commentAuthorId
            var messageRoomId = postId + postAuthorId + commentKey1! + commentUserID!
                var vc = segue.destination as! ChatViewController
                vc.MessageRoomPostId = postId
            vc.MessageRoomCommentId = commentKey1!
            vc.messageRoomIdFinal = messageRoomId

                print(postId +  "Check Message Configuration" + commentKey1!)


        }

错误是

Could not cast value of type 'BlogApp2.CommentListViewController' (0x10b31d280) to 'UIButton'

Link 你从源视图控制器到目标视图控制器的 segue,而不是从你的 button/cell,这样它不会在点击操作发生时自动触发 segue。

Link 将 segues 直接连接到按钮(等)对于快速触发 segues 非常方便,而无需调用 performSegue 的额外代码,但如果您需要有条件地触发 segues,则不能使用它。

确保您的 IBAction 方法也链接到适当的按钮。根据您的单元格中的内容,您可能希望使用 UITableViewDelegate 方法 tableView(_:didSelectRowAt:) 而不是 IBAction。

在您的 performSegue 调用中将 self 更改为 sender,这样它将按钮而不是视图控制器发送到 prepareForSegue 方法。

改变

performSegue(withIdentifier: "toMessageRoom", sender: self)

performSegue(withIdentifier: "toMessageRoom", sender: sender)