Swift・iOS

Swiftを中心に学んだことを記録に残すブログです。技術に関係ない記事もたまに書いています。

【Swift】エクステンション(extension)を使うメリット

■エクステンション(extension)とは

拡張機能は、既存のクラス、構造体、列挙型、またはプロトコルタイプに新しい機能を追加します。」

引用:The Swift Programming Language (Swift 4.1): Extensions

 

■メリット

同じプロパティやメソッドを繰り返し記述することを避けることができるため、可読性が上がることがメリットです。

 

※具体例に関しては以下記事で取り上げられています。

「例えば、Viewの背景をピンク色にしたいとします。ただ、他のViewでもピンク色を使う場合、汎用的にピンク色を定義しておきたいと考えます。そこでextensionを利用します。」

引用:【swift】extension(拡張)を上手に活用しよう | 笑顔はじめました

 

■継承とエクステンションの違い

継承は親クラスからメソッドとプロパティを引き継ぐのに対して、extensionは単純に既存クラスへの機能を追加します。

 

■とりあえず書いてみる

ViewControllerにエクステンションを使って新しい色を追加するコードを書いてみました。

このコード量では実感しにくいかもしれませんが、何色も新しい色を追加する場合、エクステンションを使わずに直接ViewControllerに記述すると単純にスコープが大きくなって読みにくくなってしまいます。また、新しい色を使い回すこともできないので、各メソッドに同様のコードを記述することとなりやはり読みにくくなります。

そのため、エクステンションを使って新しい色に関する記述をまとめておくことは可読性を高めることにつながります。

import UIKit

extension UIColor {
    // 新しい色を追加
    class var newColor: UIColor {
        return UIColor(red:0.7898, green:0.6988, blue: 0.8433, alpha: 1)
    }
}

class ViewController: UIViewController {
    
    @IBOutlet weak var backgroundView: UIView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        // 拡張した色を表示
        let color = UIColor.newColor
        backgroundView.backgroundColor = color
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

 

■参考記事

The Swift Programming Language (Swift 4.1): Extensions

【Swift】継承とエクステンションについて説明するよ | Fussan Blog

プロトコルを実装する時はextensionを使おう - Qiita

SwiftのExtensionによるクラス分割 - Qiita

【Swift】Protocolごとにextensionで切り分けて実装するワケ | Developers.IO

【Swift】Dateの王道 【日付】 - Qiita