Swift

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

swift get set

どうも、iOSエンジニアで、プログラミングスクール「テクテック」主宰のクウルス(@Qoo_Rus)です。

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は変数に入れた値を使って他のプロパティに値を入れるのに使う

プログラミング初心者がSwiftの勉強でつまづくポイントを解説します

当ブログ「えれぴこ!」では今後も、プログラミング初心者がSwiftを勉強している時につまづきやすいポイントを丁寧にわかりやすく解説していきたいと思います。

クウルス
クウルス
初めて本格的に勉強するプログラミング言語がSwiftという方は要チェック!
エンジニア/プログラミングスクール講師
クウルス
京都大学を中退してベンチャー企業の経営をしている26才エンジニア。 スポーツ動画分析アプリ「GENSEKI」の開発に取り組みながら、プログラミングスクール「TEKUtech(テクテック)」を主催。 趣味はゲーム(特に格闘ゲーム)と音楽(特にエレクトーンとゲーム音楽)で、そちらについてもブログをちょこちょこ。
\ Follow me /