公開中のアプリ

[Swift入門#26]クラス(エクステンション編)

今回はエクステンション(extension)について書きたいと思います。
エクステンションの説明から実際の使用例までサンプルコードをもとにわかりやすく説明していきたいと思います。

エクステンションとは

エクステンションは既にある型に新しいプロパティやメソッドを追加できる仕組みです!
要は自分の好きなようにカスタマイズできるみたいなもんですね!

エクステンションを書いてみよう

では早速エクステンションの書き方から見ていきましょう!
今回はわかりやすく、Int型をエクステンションでカスタマイズしてみます。
下記コードを見てみましょう。

let num = 5
print(num * 5) // 結果 25

定数に5を代入して5をかけた結果をprint()で出力しています。
この同じ計算をInt型を拡張してInt型の中で計算させてみます。

下記コードを見てみましょう。

extension Int {
    var kakezan: Int {
        return self * 5
    }
}
let num = 5
print(num.kakezan)// 結果 25

エクステンションさせるには1行目のように
extensionと書いて拡張したい型を書きます。

あとは。処理の中で好きなプロパティやメソッドを追加していくだけです!

今回で言うと2行目に「変数kakezan」を定義して計算プロパティを使って5をかけた数字を「変数kakezan」に返しています。

出力する時は7行目のように書けばOKです!

今回の例は簡単過ぎましたが、エクステンションを使えばこのようにプロパティやメソッドを追加する事ができます。

プロトコルとセットで使ってみよう

エクステンションはプロトコルとセットで使うと、プロトコルに実装処理を持たせる事ができます。
とりあえず、コードを見てみましょう!

import UIKit

let dt = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "yMMMdHms", options: 0, locale: Locale(identifier: "ja_JP"))


//プロトコルを宣言
protocol timeCard {
    var type: String { get }     //出勤
    var date: String { get set } //出勤時の日時
    func push()                  //出力するメソッド
}
//プロトコルを拡張して関数の処理を書いている。
extension timeCard {
    func push() {
        print("\(Staff.name) \(type) \(date)")
    }
}

class Staff: timeCard {
    static var name: String = ""
    let type = "出勤"
    var date = dateFormatter.string(from: dt)
    init(_ name: String) {
        Staff.name = name
    }
}

let mayugezio = Staff("まゆげじお")  //インスタンス
mayugezio.push()
//結果 まゆげじお 出勤 2020年4月24日 20:33:09

前回の[Swift入門#23]クラス(プロトコル編)と同じサンプルと使いました。
前回は「Staffクラス」の中で「push()メソッド」の処理を書いていましたが、今回は「timeCardプロトコル」をエクステンションで拡張してそちらで「push()メソッド」の処理を書いています。

上記コードで言うと15行目〜19行目でエクステンションしています。

31行目の結果を見てみると、クラスに実装を書かなくても「push()メソッド」が使えたのがわかると思います。

まとめ

今回は既存の型に新しいプロパティやメソッドを追加できるエクステンションについて書きました!
クラス関連は覚える事がいっぱいあって大変ですよね・・・

少しずつ慣れていくと思うので理解できなくても一回スルーするくらいの気持ちでいいと思います٩( ᐛ )و

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

アプリ