どうも、Web制作会社で仕事をしています、クウルス(@Qoo_Rus)と申します。
自社開発でiOSアプリに取り組んでいた時期があるので、Swiftをかじっていた時期がありました。
Swiftのclassやstructなどを書いていると、
var dog: Animal {
get {
// いろいろ
}
set {
// いろいろ
}
}
getとsetを使ったコードを見かけることがあります。
と思って困っている方向けに、
- getとsetは一体何をしているコードなのか?
- getとsetの使い方は?
についてコードを書きながらお話していきます。
環境は以下の通りです。もし違うバージョンの場合、異なる画面や挙動になる可能性があります。ご了承ください。
- Xcode 11.2.1
- Swift 5.1
Contents
getとsetを理解するためのコードを準備
コードを理解するにはplaygroundで!
まず、コードの意味を理解していくには、アプリを作るprojectで理解するのではなく、playgroundを活用していきましょう。
Xcodeを開いた状態で、ツールバーの「New」を選択し、「Playground」 をクリックして、playgroundを立ち上げていきます。




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円
そして、コードを実行してみましょう。

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

getとsetの意味
まず、ここでのgetとsetは
- getter(ゲッター)
- setter(セッター)
と呼ばれます。
他のプログラミング言語でも共通していることがある用語なので、知っておくと便利かもしれません。
getは他のプロパティの値を受け取るのに使う

例で出した get の かっこ{ } の中では
変数 price というプロパティから値を受け取り、計算をして変数 comsumptionTax に入れるという処理を行っています。
プロパティ(property)とは?
(かなりざっくり言うと・・・)クラスが持っている変数のこと。

price を 150 に設定すると
get の中で以下の計算が行われます。
Int(Float(150) * 0.1)
// Int(整数)型の100を Float(浮動小数点)型に変換して0.1と掛け算した結果をInt型にする
そして、この結果である 15 を consumptionTax に代入しています。
setは入れた値を使って他のプロパティの値に渡すのに使う

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

consumptionTax を 20 に設定すると、
set の中で以下の計算が行われます。
price = Int(Float(20) / 0.1)
// consumptionに新しく入れた20をFloat(浮動小数点型)に変換して
// 0.1で割ったものをInt(整数型)に変換してpriceに代入
なので、計算結果である 200 が price に代入されます。
- getは他のプロパティの値を利用して変数に入れるのに使う
- setは変数に入れた値を使って他のプロパティに値を入れるのに使う