0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Swift】個人的に使っている便利なextensionたち

Posted at

前書き

Swiftにはextensionというものが存在し、これを使うことでよりクラスを改造しコーディングを楽にすることができます。
実装するには後述するコードをコピぺするだけです。

全てまとめたものをこちらで配布しています。ご自由にお使いください。

詳しく知りたい方はextensionについてのこちらの記事(未作成)を読んでみてください。

元々のアイデアはこちらから得ました。

目次

本題

型変換シリーズ

例えば、Int型からString型に変換する場合、本来なら「String(〇〇)」というふうに書かないといけないものを「〇〇.s」というふうに略記することができるようになります。

  • Int型にする → hoge.i
  • Double型にする → hoge.d
  • CGFloat型にする → hoge.cg
  • String型にする → hoge.s

という仕様にしました。

Extensions.swift
extension Int{
//    String(hoge)をhoge.sでもできるようにする
    var s: String{
        return String(self)
    }
//    Double(hoge)をhoge.dでもできるようにする
    var d: Double{
        return Double(self)
    }
//    CGFloat(hoge)をhoge.cgでもできるようにする
    var cg: CGFloat{
        return CGFloat(self)
    }
}

extension Double{
//    String(hoge)をhoge.sでもできるようにする
    var s: String{
        return String(self)
    }
//    String(format: "%.2f", hoge)などをhoge.s("%.2f")などでもできるようにする
    func s(_ format: String) -> String{
        return String(format: format, self)
    }
//    Int(hoge)をhoge.iでもできるようにする
    var i: Int{
        return Int(self)
    }
//    CGFloat(hoge)をhoge.cgでもできるようにする
    var cg: CGFloat{
        return CGFloat(self)
    }
}

extension String{
    var i: Int?{
        return Int(self)
    }
    
    var d: Double?{
        return Double(self)
    }
}

アラートシリーズ

本来であればアラートを表示させるために長いコードを書かなければならないですが、メッセージを表示させるだけのアラートなどを簡略化させるextensionを作ってみました。

こういうふうな使用にしました。
やりたいこと コード 補足説明
メッセージの表示 showMessageAlert(title: タイトルを入力, message: メッセージを入力)
OKボタン付きのアラートの表示 showOkAlert(title: タイトルを入力, message: メッセージを入力) {
    OKボタンが押された時の処理
}
OKボタンとCancelボタン付きのアラートの表示 showOkCancelAlert(title: タイトルを入力, message: メッセージを入力) {
    OKボタンが押された時の処理
} canceledFunc: {
    Cancelボタンが押された時の処理
}
任意のアラートの表示 showAlert(title: タイトルを入力, message: メッセージを入力, actionDictionary: [ボタンのテキスト: {処理内容}]) Dictionary型引数のkeyをボタンに表示する内容、valueをそのボタンがタップされた時の処理というふうにします。
キャンセル付きの任意のアラートの表示 showCancelAlert(title: タイトルを入力, message: メッセージを入力, actionDictionary: [ボタンのテキスト: {処理内容}]){
    Cancelボタンが押された時の処理
}
上に同じ
Extensions.swift
extension UIViewController{
    func showAlert(title: String?, message: String?, actionDictionary: Dictionary<String, () -> Void >){
        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
        for elem in actionDictionary{
            let key = elem.key
            let function = elem.value
            let action = UIAlertAction(title: key, style: .default) { (action: UIAlertAction) in
                function()
            }
            alert.addAction(action)
        }
        present(alert,animated: true, completion: nil)
    }
    
    func showCancelAlert(title: String?, message: String?, actionDictionary: Dictionary<String, () -> Void >, canceledFunc: @escaping () -> Void){
        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
        for elem in actionDictionary{
            let key = elem.key
            let function = elem.value
            let action = UIAlertAction(title: key, style: .default) { _ in
                function()
            }
            alert.addAction(action)
        }
        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { _ in
            canceledFunc()
        }
        alert.addAction(cancelAction)
        present(alert,animated: true, completion: nil)
    }
    
    func showMessageAlert(title: String?, message: String?){
        showAlert(title: title, message: message, actionDictionary: ["OK": {}])
    }
    
    func showOkAlert(title: String?, message: String?, okFunc: @escaping () -> Void){
        showAlert(title: title, message: message, actionDictionary: ["OK": okFunc])
    }
    
    func showOkCancelAlert(title: String?, message: String?, okFunc: @escaping () -> Void, canceledFunc: @escaping () -> Void){
        showCancelAlert(title: title, message: message, actionDictionary: ["OK": okFunc], canceledFunc: canceledFunc)
    }
}
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?