如何在文件中声明函数或变量,并始终在Swift中使用它

时间:2017-11-14 16:39:01

标签: ios swift

目前我正在开发一个项目,我必须在每个视图控制器中使用警报消息。特别是这一个:

func showMessage(myMessage: String) {
    let myAlert = UIAlertController(title: "ALERT", message: myMessage, preferredStyle: UIAlertControllerStyle.alert)
    let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)
    myAlert.addAction(okAction)
    self.present(myAlert, animated: true, completion: nil)
}

重复使用相同的代码会使我的代码变得冗长。此场景还包含一些其他函数和一些变量。如何在不同文件中的某处声明此函数并在必要时使用它?我应该使用像:

这样的单例模式
static let sharedInstance = viewController()

如果有,请给我举个例子。

3 个答案:

答案 0 :(得分:2)

执行此操作的最佳方法是使用扩展程序,例如:

extension UIViewController {
    func showMessage(myMessage: String) {
        let myAlert = UIAlertController(title: "ALERT", message: myMessage, preferredStyle: UIAlertControllerStyle.alert)
        let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)
        myAlert.addAction(okAction)
        self.present(myAlert, animated: true, completion: nil)
    }
}

这样你就可以在任何UIViewController子类中使用它。您也可以将函数放入swift文件中作为"全局函数"但那不是很干净。

答案 1 :(得分:2)

您的函数showMessage(myMessage :)对于您的所有ViewControllers都是通用的。所以你可以:

  • 使用超类ViewController并在那里实现你的功能:

    class BaseViewController {
        func showMessage(myMessage: String) { ... }
    }
    
  • 使用swift协议:

    protocol MessageHelper {}
    
    extension MessageHelper where Self: UIViewController {
        func showMessage(myMessage: String) { ... }
    }
    
    extension MyViewController: MessageHelper {}
    

使用处理所有邮件的共享实例可能是另一种方法。

class MessageController {
    static let shared = MessageController()
    private init() {}

    func showMessage(myMessage: String, viewController: UIViewController) { ... }

}

当您需要显示消息时,只需致电MessageController.shared.showMessage(myMessage:viewController:)

使用消息控制器将为您提供更多可能性,您可以计算显示的消息数量或过滤消息以在同一个地方显示。

答案 2 :(得分:0)

为应用中的视图控制器使用自定义类。每个视图控制器都不是子类化UIViewController,而是子类化CustomViewController类。这是一个例子:

class CustomViewController: UIViewController {
    func showMessage(myMessage: String) {
        let myAlert = UIAlertController(title: "ALERT", message: myMessage, preferredStyle: UIAlertControllerStyle.alert)
        let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)
        myAlert.addAction(okAction)
        self.present(myAlert, animated: true, completion: nil)
    }
}

您创建子类CustomViewController的每个视图控制器都可以访问showMessage函数。