目前我正在开发一个项目,我必须在每个视图控制器中使用警报消息。特别是这一个:
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()
如果有,请给我举个例子。
答案 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
函数。