Swift

【初心者向け】Swiftのgetとsetが出てくるコードについて解説

swift get set

どうも、Web制作会社で仕事をしています、クウルス(@Qoo_Rus)と申します。

自社開発でiOSアプリに取り組んでいた時期があるので、Swiftをかじっていた時期がありました。

Swiftのclassやstructなどを書いていると、

var dog: Animal {
    get {
        // いろいろ
    }
    set {
        // いろいろ
    }
}

getとsetを使ったコードを見かけることがあります。

getとsetって一体何なんだ?

と思って困っている方向けに、

  1. getとsetは一体何をしているコードなのか?
  2. getとsetの使い方は?

についてコードを書きながらお話していきます。

クウルス
クウルス
Swiftを学習したての初心者の方にもわかりやすくしました!一緒に手を動かしながら理解していきましょう!

環境は以下の通りです。もし違うバージョンの場合、異なる画面や挙動になる可能性があります。ご了承ください。

  • Xcode 11.2.1
  • Swift 5.1

getとsetを理解するためのコードを準備

コードを理解するにはplaygroundで!

まず、コードの意味を理解していくには、アプリを作るprojectで理解するのではなく、playgroundを活用していきましょう。

Xcodeを開いた状態で、ツールバーの「New」を選択し、「Playground」 をクリックして、playgroundを立ち上げていきます。

swift get set swift get set swift get set
swift get setこんな画面になればOK!

 

クウルス
クウルス
これでコードを理解する作業の下準備が完了しました!

getとsetを使ったコードを実行してみる

まずは以下のコードをコピーして、そのままplaygroundに貼り付けてください。

class Product {
    var name: String // 商品名
    var price: Int // 商品の値段
    var consumptionTax: Int { // 商品にかかる消費税
        get {
            // 商品の値段から消費税を計算
            return Int(Float(price) * 0.1) // 消費税率は10%
        }
        set {
            // 商品にかかる消費税から値段を計算
            price = Int(Float(newValue) / 0.1)
        }
    }
    
    // 商品名と商品の値段を初期化
    init(name: String, price: Int) {
        self.name = name
        self.price = price
    }
}

// 100円のりんごのインスタンスを生成
var apple = Product(name: "りんご", price: 100)
// 100円のりんごにかかる消費税
apple.consumptionTax // 10円

// りんごの値段を150円に変更
apple.price = 150
// 150円のりんごにかかる消費税
apple.consumptionTax // 15円

// りんごにかかる消費税を20円に設定
apple.consumptionTax = 20
// 消費税が20円の場合のりんごの値段
apple.price // 200円

そして、コードを実行してみましょう。

swift get set

すると実行結果が画面右端に表示されます。

swift get set
クウルス
クウルス
実行したコードの中で一体何が起きているのか、もう少し詳しくみていきましょう!

getとsetの意味

まず、ここでのgetとsetは

  • getter(ゲッター)
  • setter(セッター)

と呼ばれます。

他のプログラミング言語でも共通していることがある用語なので、知っておくと便利かもしれません。

getは他のプロパティの値を受け取るのに使う

swift get set

例で出した get の かっこ{ } の中では

変数 price というプロパティから値を受け取り、計算をして変数 comsumptionTax に入れるという処理を行っています。

プロパティ(property)とは?

(かなりざっくり言うと・・・)クラスが持っている変数のこと。

price150 に設定すると

get の中で以下の計算が行われます。

Int(Float(150) * 0.1)
// Int(整数)型の100を Float(浮動小数点)型に変換して0.1と掛け算した結果をInt型にする

そして、この結果である 15 を consumptionTax に代入しています。

setは入れた値を使って他のプロパティの値に渡すのに使う

例で出した set のかっこ { } の中では

変数 consumptionTax に新しく入った値を使って(newValue と書けば計算で使える)、計算結果を他のプロパティである変数 price に渡すという処理を行っています。

swift get set

consumptionTax20 に設定すると、

set の中で以下の計算が行われます。

price = Int(Float(20) / 0.1)
// consumptionに新しく入れた20をFloat(浮動小数点型)に変換して
// 0.1で割ったものをInt(整数型)に変換してpriceに代入

なので、計算結果である 200price に代入されます。

要点まとめ
  1. getは他のプロパティの値を利用して変数に入れるのに使う
  2. setは変数に入れた値を使って他のプロパティに値を入れるのに使う
Web制作会社 取締役
クウルス
EarthCampus株式会社 取締役。 Webサイトの受注制作・運営をしています。 TwitterではITビジネスにつながる技術的な学びを発信。 趣味はエレクトーンと格闘ゲーム。
\ Follow me /