我有一个实用程序类,其中包含多个其他类使用的函数。其中之一是警报功能:
class Utils {
func doAlert (title: String, message: String, target: UIViewController) {
let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Close", style: .cancel, handler: nil))
target.present(alert, animated: true, completion: nil)
}
}
此功能始终以视图控制器上的self
为目标,因此我每次调用此功能时都不必添加target: self
,但我不能将其设置为默认值,因为这会导致它返回Utils
类。有什么方法可以重写这个以避免这种情况吗?
答案 0 :(得分:4)
实用程序类完全是出于这个原因的反模式,你真正想要使用的是extension
:
extension UIViewController {
func doAlert(title: String, message: String) {
let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Close", style: .cancel, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}
然后您可以直接在所有控制器上调用该方法:
self.doAlert(title: "title", message: "message")
通常避免使用实用方法的类。尝试将方法添加到功能实际所属的类型。
答案 1 :(得分:2)
您可以将它放在UIViewController的扩展中,而不是将函数放在Utils类中,如下所示:
extension UIViewController {
func doAlert (title: String, message: String) {
let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Close", style: .cancel, handler: nil))
target.present(alert, animated: true, completion: nil)
}