在没有 segue 的情况下展开到特定的视图控制器

Unwind to a specific view controller without a segue

不使用故事板时,如何获得与展开转场相同的功能?假设我有一个导航控制器,里面有几个视图控制器,我想顺利地回到某个控制器。你会如何做到这一点?

你可以在 UINavigationController 上写一个扩展来实现这个。根据您的评论,您想设置一个标识符并返回使用该特定标识符。为此,您可以编写一个简单的协议:

protocol Unwindable {
    var identifier: String { get set }
}

你所有的视图控制器都应该确认这个协议并设置标识符值。像这样实现 UINavigationController 扩展:

extension UINavigationController {

    func goBackToInstance(withIdentifier identifier: String) {
        let mapped = self.viewControllers.compactMap{ [=11=] as? Unwindable }
        for vc in mapped.reversed() {
            if (vc.identifier == identifier) {
                self.popToViewController(vc as! UIViewController, animated: true)
            }
        }
    }
}

然后您可以返回使用:

self.navigationController?.goBackToInstance(withIdentifier: "Your Identifier")