1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Swift5でgetterとsetter(計算型プロパティ)についてまとめた

Last updated at Posted at 2021-06-23

はじめに

こんにちは@kaneko77です。
gettersetterについてたまにわかりずらいなと思ってしまう時があった為
調べ直したものをまとめたいと思います。

getterとsetterについて

この二つを説明するにあたって計算型プロパティという物を説明する必要があります。
計算型プロパティとは 値の参照と更新の機能を手続きで構成するプロパティになります。
そして計算型プロパティにはget節とset節というものがありそちらが今回のgetterとsetterになるということです。
get節がgetterでset節がsetterです。
計算型プロパティは、値の更新と参照ができるパターン参照だけできるパターンがの2種類があるということも知って置いてください。
結局のところ、参照した結果の値を計算するのがget節で、指定された値を使ってプロパティを表す値を更新する部分がset節になるということです。

上記のまとめ

get節: 参照した結果の値を計算する
set節: 指定された値を使ってプロパティを表す値を更新する
getter: どういう風に値を取得するのか
setter: 値を代入した場合の動き
get節のみの定義でもできる

説明

基本

以下が計算型プロパティのゲッタとセッタを基本の形でコードを現した物になります。。

var プロパティ名:  {
    get{
        ....
    }
    set(仮引数){
        ....
    }
}

仮引数の省略

仮引数は省略可能でその場合は値の取得はnewValueという変数が使えます。

var プロパティ名:  {
    get{
       ....
    }
    set{
       return newValue 
    }
}

returnの省略

関数と同じなのでreturnは省略できます。

var プロパティ名:  {
    get{
       ....
    }
    set{
       newValue 
    }
}

setの省略

プロパティの値を参照するときだけの場合はsetが必要ない為、省略できます。

var プロパティ名:  {
    get{
       ....
    }
}

getのみの場合さらに省略することができます。
以下もゲッタを使ってるのと同じです。
get自体を省略できます。

var プロパティ名:  {
    ....
}

具体的な利用シーン

それでは書き方として色んな書き方や概念がわかってきたと思うので続いて
じゃー具体的にどういう時に使われるのかというお話になります。
以下がよく使われる例

  • 税込み価格・税抜き価格取得したい時
  • 入力文字を全部大文字にしたい時

etc..
それでは上記二つを例としてコードで書いてみます。

税込み価格・税抜き価格取得したい時

今は税金10%の時代なので1.10でやります。

var price: Double = 100
var tax: Double {
    get{ 
        price * 1.10
    }
    set{ 
        price = newValue / 1.10
    }
}
price = 1000
// 税込み価格を取得
print(tax) // 1100.0

tax = 1100
// 税抜き価格を取得
print(price) // 999

入力文字を全部大文字にしたい時

var inputValue = "test"
var uppercaseValue: String {
    get { inputValue }
    set { inputValue = newValue.uppercased() }
}

uppercaseValue = "hogehoge"
print(uppercaseValue) // HOGEHOGE

#終わりに
今回はgettersetterについて共有しました。
プロパティのメリットは外部から参照した時に意図しない変更を加えられなくするところだと思います。
getterは対象の値を書き換えたくない時などに使えると思います。
setterは何か付け加えた時、例えば名前の先頭文字に全部mr.とかつけたいなど要は値の加工ですねに使えると思います。
慣れれば割といろんなところに使えると思います。

ここまで読んでいただきありがとうございます。

参考にしたサイト

https://qiita.com/nack43/items/5e1d7972ed0b54daeb04
https://www.hfoasi8fje3.work/entry/2018/05/07/002215

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?