こんにちは。きんくまです。
Swiftのextensionは大変便利で、いろいろなクラスに対して拡張実装を作ることが可能です。
例えば
extension UIViewController { func showAlert(title: String?, message: String?, callback: @escaping () -> Void) { let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert) let okAction = UIAlertAction(title: "OK", style: .default) { action in callback() } let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) alertController.addAction(okAction) alertController.addAction(cancelAction) present(alertController, animated: true, completion: nil) } }
こんな感じに、UIViewControllerに対して、アラートを出すことができるメソッドを定義することができます。
ただ、個人的にはこういう全ての場面で共通で使いそうなクラス(この場合UIViewController)に対して拡張を書くというのが、気になるなーと思いました。どこが気になるかというと、
– クラスを拡張していることが、クラスの定義のところを見るだけだと気づかない
– 使う必要のないクラスにも適用されてしまう
という感じでしょうか。例えば、上のコードだと、アラートを出す必要のないUIViewControllerにも拡張されてしまいます。