Swift;将自定义viewcontroller转换为viewcontroller

时间:2017-11-02 16:11:00

标签: swift viewcontroller

我有一个为我处理警报的结构。它只有一个功能:

func presentAlert(_ title:String, _ message:String, _ presenter:ViewController) {

        let myAlert = UIAlertController(title: title, message: message, preferredStyle: .alert)
        let okAction = UIAlertAction(title: "OK", style: .default, handler: nil)
        myAlert.addAction(okAction)
        presenter.present(myAlert, animated:true, completion:nil)
    }

我可以从viewcontroller调用这个。但是在子类AddTopicViewController上我收到一个错误:

myController.alert.presentAlert("Form errors", strErrMsg, self)

//error from compiler
Cannot convert value of type 'AddTopicViewController' to expected argument type 'ViewController'

所以,有两个问题:

由于AddTopicVC是VC的子类,我认为它会通过     对于需要VC的东西。那个显然是错的。可以     有人在我的逻辑中解释了这个缺陷吗?

有关如何实现目标的任何建议?该应用程序有很多     只要用户没有输入,就会显示验证和警报     所需的数据,但所有的viewcontrollers都是子类。我试过了     使用函数扩展viewcontroller但是子类给出了     该方法不可用的错误。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用所有视图控制器继承的假定基类UIViewController

func presentAlert(_ title:String, _ message:String, _ presenter:UIViewController)

或者使用UIViewController

的扩展名
extension UIViewController {

    func presentAlert(_ title:String, _ message:String) {

        let myAlert = UIAlertController(title: title, message: message, preferredStyle: .alert)
        let okAction = UIAlertAction(title: "OK", style: .default, handler: nil)
        myAlert.addAction(okAction)
        present(myAlert, animated:true, completion:nil)
    }

}