如果语句基于Swift中的前一个View Controller

时间:2016-08-23 01:06:36

标签: ios objective-c swift uiviewcontroller

我一直在尝试将此代码从Obj-C转换为Swift:If statement based on whatever the previous view controller was(几乎完全相同的问题)

换句话说,我想回到用户来自的View Controller,MainViewController或SearchTableViewController在两个展开segue之间进行选择。

我的问题是:我如何编写与上面链接相同的功能代码,但是在Swift中而不是Obj-c?

这是我到目前为止的翻译(不能正常工作,无法解决错误)

//Method
func backViewController() -> UIViewController {
        let numberOfViewControllers = self.navigationController!.viewControllers.count
        if numberOfViewControllers < 2 {
            return nil
        }
        else {
            return self.navigationController!.viewControllers[numberOfViewControllers - 2]
        }
    }


    if  self.backViewController() == MainViewController {
//Back to MainViewController
        self.performSegueWithIdentifier("AuthorBackMain", sender: self)
    }
    else {
//Back to SearchTableViewController
        self.performSegueWithIdentifier("AuthorBackSearch", sender: self)
    }

修改/进展:

我已将功能更改为backViewController() -> UIViewController?,并且可以获得错误。但是在if语句中出现了一个关于二元运算符的新错误&#39; ==&#39;

"Binary operator '==' cannot be applied to operands of type 'UIViewController?' and 'MainViewController.Type'.

2 个答案:

答案 0 :(得分:2)

这是斯威夫特。只有一个可选的nil。您正在尝试从backViewController方法返回UIViewController。 UIViewController不是可选的,因此它不能是nil。如果您需要nil,请将其设为可选:UIViewController?

答案 1 :(得分:1)

  1. 如果您希望能够返回nil,则需要选择返回类型 替换func backViewController() -> UIViewController
    func backViewController() -> UIViewController?

  2. 由于您要比较不同的viewControllers,因此无法使用&#39; ==&#39;。您应该尝试将其转换为您想要的viewController 替换这个

        if  self.backViewController() == MainViewController {
    //Back to MainViewController
        self.performSegueWithIdentifier("AuthorBackMain", sender: self)
        }
        else {
    //Back to SearchTableViewController
        self.performSegueWithIdentifier("AuthorBackSearch", sender: self)
        }
    

        if let _ = self.backViewController() as? MainViewController {
    //Back to MainViewController
        self.performSegueWithIdentifier("AuthorBackMain", sender: self)
        }
        else if let _ = self.backViewController() as? SearchTableViewController {
    //Back to SearchTableViewController
        self.performSegueWithIdentifier("AuthorBackSearch", sender: self)
        }