【2024年4月】弊社では、基本リモートワークで一緒に成長してくださるメンバーを広く募集させていただいております。 詳細はこちら

【Swift】extensionの使い方と開発に役立つ様々なサンプルコードを解説!

【Swift】extensionの使い方と開発に役立つ様々なサンプルコードを解説!
ふくしま

こんにちは!株式会社メモリアインクのふくしまです!

この記事では実践的で役立つextensionの例を通じて、extensionの使い方について解説します。

この記事を読んで分かること…
・extensionとは?
・extensionの基本的な定義と使い方
・開発で役立つ具体的なextensionの使用例

目次

extensionとは?

Swiftのextension(拡張)機能は、既存のクラス、構造体、列挙型、またはプロトコルタイプに新しい機能を追加するための機能です。この機能を利用することで、既存のコードを改変することなく、追加機能を実装することができます。

extensionの基本的な使い方

Swiftでextensionを使用する基本的な形式は、拡張したい型の後にextensionキーワードを記述し、その中に新しい機能を実装します。

extension SomeType {
    // 新しい機能をここに追加する
}

Stringに関する便利なextension

String型に対して、頻繁に使用される機能をextensionを使って追加します。

サンプルコード

extension String {
    // 文字列が数字のみで構成されているかを判断する
    var isNumeric: Bool {
        return !isEmpty && rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) == nil
    }
    
    // 文字列を逆順にする
    var reversedString: String {
        return String(self.reversed())
    }
}

// 使用例
print("12345".isNumeric)
print("あいうえお".reversedString)

サンプルコードの説明

◾️行3: isNumericという計算プロパティを宣言しています。このプロパティはBool型の値を返します。
◾️4:行4: isNumericプロパティの値を計算します。この行は、文字列が空でない(!isEmpty)かつ数字以外の文字が含まれていない(rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) == nil)場合にtrueを返します。
◾️ 8: reversedStringという計算プロパティを宣言しています。このプロパティはString型の値を返します。
◾️9: reversedStringプロパティの値を計算します。この行は、現在の文字列(self)を逆順にした新しい文字列を生成して返します。self.reversed()で文字列を逆順にし、String()でそれを新しい文字列に変換しています。

Dateに関する便利なextension

Date型に対して、日付を扱いやすくするための便利な機能を追加します。

サンプルコード

import Foundation

extension Date {
    // 特定のフォーマットの文字列として日付を返す
    func toString(format: String = "yyyy-MM-dd HH:mm:ss") -> String {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = format
        return dateFormatter.string(from: self)
    }
}

// 使用例
let now = Date()
print(now.toString()) 

サンプルコードの説明

◾️行5: toStringメソッドを宣言しています。このメソッドは、引数として日付のフォーマットを指定するString型のパラメータformatを取ります。デフォルト値として"yyyy-MM-dd HH:mm:ss"が設定されており、これは年月日時分秒を表します。
◾️行6: DateFormatterのインスタンスを作成しています。DateFormatterは日付とテキスト表現を相互に変換するためのクラスです。
◾️行7: dateFormatterdateFormatプロパティに、メソッドの引数から受け取ったフォーマット文字列を設定しています。
◾️行8: dateFormatterを使って、メソッドを呼び出したDateインスタンス(self)を引数で指定されたフォーマットの文字列に変換し、その文字列を返しています。

UICollectionViewのカスタマイズに役立つextension

UICollectionViewのレイアウトや挙動をカスタマイズするためのextensionを提供します。

サンプルコード

import UIKit

extension UICollectionView {
    // セルのサイズを動的に調整する
    func setDynamicCellSize(cellWidth: CGFloat, cellHeight: CGFloat) {
        if let layout = self.collectionViewLayout as? UICollectionViewFlowLayout {
            layout.estimatedItemSize = CGSize(width: cellWidth, height: cellHeight)
        }
    }
}

サンプルコードの説明

◾️行5: setDynamicCellSize(cellWidth:cellHeight:)メソッドを宣言しています。このメソッドは、セルの幅と高さを指定するCGFloat型のパラメータを2つ取ります。
◾️行6: self.collectionViewLayoutUICollectionViewFlowLayoutにダウンキャストしています。このダウンキャストが成功した場合のみ、次の行が実行されます。
◾️行7: レイアウトのestimatedItemSizeプロパティに新しいサイズ(CGSize)を設定しています。これにより、セルのサイズが動的に調整されます。

まとめ

いかがてしたか?
この記事では、Swiftのextension機能の基本から、具体的な開発シナリオで役立つ便利なサンプルコードを示しながら解説しました。extensionを利用することで、コードの再利用性と可読性を向上に繋がります。
この記事が、皆様のお役に立てれば幸いです!それではまた、次の記事でお会いしましょう〜

ふくしま

この記事があなたのスキルアップに役立ったなら、次のキャリアステップを踏み出す絶好の機会かもしれません。エンジニアとしてのさらなる成長と挑戦を求めるなら、
未経験からIT・Webエンジニアを目指すなら【ユニゾンキャリア】
をオススメします!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次