前書き
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)
}
}