我一直在尝试将此代码从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'.
答案 0 :(得分:2)
这是斯威夫特。只有一个可选的nil
。您正在尝试从backViewController
方法返回UIViewController。 UIViewController不是可选的,因此它不能是nil
。如果您需要nil
,请将其设为可选:UIViewController?
。
答案 1 :(得分:1)
如果您希望能够返回nil
,则需要选择返回类型
替换func backViewController() -> UIViewController
func backViewController() -> UIViewController?
由于您要比较不同的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)
}