Ios 让某些ViewController访问函数的最有效方法

Ios 让某些ViewController访问函数的最有效方法,ios,swift,uialertview,access-control,Ios,Swift,Uialertview,Access Control,我有一个包含大量ViewControllers的应用程序。还有一组函数返回UIAlertControllers,通知用户与其帐户相关的事件。 以下是一个此类功能的示例: func signInSuccessAlert() -> UIAlertController { //signInSuccessAlert let signInSuccessAlert = UIAlertController(title: "Success", message: "You h

我有一个包含大量
ViewController
s的应用程序。还有一组函数返回
UIAlertControllers
,通知用户与其帐户相关的事件。 以下是一个此类功能的示例:

func signInSuccessAlert() -> UIAlertController {
        //signInSuccessAlert
        let signInSuccessAlert = UIAlertController(title: "Success", message: "You have been successfully signed in!", preferredStyle: .alert)
        signInSuccessAlert.addAction(UIAlertAction(title: "Okay", style: .default, handler: nil))
        return signInSuccessAlert
    }
我的目标是能够在一行中显示这些
UIAlertController
s。像这样:

present(signInSuccessAlert(), animated: true, completion: nil)

使这些函数只对需要它们的
ViewController
s可用的最佳方法是什么?
而不是全局声明它们。

您可以创建UIViewController的扩展并在那里声明所有这些函数。 大概是这样的:

extension UIViewController
{

    func signInSuccessAlert() -> UIAlertController {
        //signInSuccessAlert
        let signInSuccessAlert = UIAlertController(title: "Success", message: "You have been successfully signed in!", preferredStyle: .alert)
        signInSuccessAlert.addAction(UIAlertAction(title: "Okay", style: .default, handler: nil))
        return signInSuccessAlert
    }

}

这样,所有ViewController都可以访问这些功能。如果只想访问某些ViewController,则必须使用评论中建议的AgRizzo协议。

制定一个协议声明它们。然后在协议的扩展中实现它们。任何需要访问的ViewController都应符合协议。