質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

469閲覧

Swiftのgetとsetについて助けてください!

JinTokunaga

総合スコア23

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2020/04/07 07:51

現在初心者ようのテキストを進めていまして、シンタックスの説明に入ったのですが、getがりーどオンリーということ、setは別の値で保存する頃は分かったのですが、あまり説明が詳しくなくて、画像の式がよくわかりません。。。わかりやすく教えていただけないでしょうか...?
お助け頂けないでしょうか?イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takabosoft

2020/04/07 07:58

何が分からないのか分からないので、具体的に何がわからないのかを書いてください。
miyabi_takatsuk

2020/04/07 07:58

ゲッターとセッターの前に、クラスとそのメンバ(プロパティとも言います)に関しては理解されておりますでしょうか??
TsukubaDepot

2020/04/07 08:08

式というのは、もしかして (直径)= 2 *(半径) (円周)= 2 *(半径)* (円周率) (半径)= (円周)÷ (2 *(円周率)) のことでしょうか。
guest

回答2

0

swift

1 2var radius = 10.0 3 4var diameter: Double { 5 get { 6     // 1行でreturnが省略されてるのでreturnつけときます。 7 return radius * 2 8 } 9 set(length) { 10 radius = length / 2 11 } 12} 13 14 15diameter = 100 // <= これでsetの部分が動きます。値をセットできます。 16 17print(radius) // => 50 ( length: 100 / 2 ) 18 19let a = diameter // これでgetの部分が動きます。値をゲットできます。 20 21print(a) // => 100 ( radius: 50 * 2 ) 22

とりあえずこんな感じでそんなものがあるんだとおぼえておいて先に進んでみてはどうでしょうか?
必要なときが来たら便利だな〜って実感できると思います。

投稿2020/04/07 08:14

編集2020/04/07 08:18
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

get(ゲッター)とset(セッター)は使いこなすと非常に使い勝手がいい仕様です。
だいたいは、その画像の説明の通りなのですが、少し言い方を変えると、
ただのプロパティのように扱える、メソッドのようなものとも言えると思います。

getは、通常プロパティとして呼び出した際に実行され、ブロック内の処理を実行しつつ、ブロック内の最終行の値をそのプロパティ値として返します。

一方setは、通常プロパティのように値を代入した際に呼び出され、set(代入した値)といったようにして、中の構文を実行します。

では、このgetset、使うとどう便利かというと、今回の書籍の構文では、radiusを変えるだけで、diameteraroundの値(が入っているわけではないが)を一発で変えることができるという利点があります。

今回の書籍の画像のことを、setgetを使わずに実装するとなると、下記のように、七面倒なことをせねばなりません。

swift

1var radius = 10.0 2 3var diameter: Double = 0 4var around: Double = 0 5 6// クラスの初期化 7init(){ 8 self.diameter = self.radius * 2 9 self.around = self.radius * 2 * Double.pi 10} 11 12// radiusの値を変えるたびに、initで実行していることを実行し、値を変えなければ、diameterとaroundの変化させられない。 13// その上、setで実行してる、radiusの値のコントロールも、別メソッドで実装しなければいけなくなる

あとは、tyobigorouさんのおっしゃる通り、今は使い方だけ覚えて先進んだ方がいいかも。
使いこなすのは、現段階では、少し難しいかもなーとお見受けします。

投稿2020/04/07 08:22

miyabi_takatsuk

総合スコア9528

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問