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

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

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

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

Q&A

1回答

411閲覧

swiftのクラスと構造体

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

0グッド

0クリップ

投稿2018/06/19 14:53

swiftを勉強しているのですが,クラスと構造体についてわからない点があります.

関数aが関数bを呼び出す時に,関数bにクラスのインスタンスを引数として渡した場合,関数b内でクラスのプロパティの値を変更すると,関数a内のクラスのプロパティも変更され,
関数aが関数bを呼び出す時に,関数bに構造体のインスタンスを引数として渡した場合,関数b内で構造体のプロパティの値を変更しても,関数a内の構造体のプロパティは変更されないそうなのですが,その具体的なプログラムがどんなものか分からないので,具体例を示していただけないでしょうか.

できればプログラミング初心者でも理解できるようなプログラムでお願いします.

swift 4.x です.

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

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

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

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

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

fuzzball

2018/06/20 00:25

「関数b内で構造体のプロパティの値を変更」は出来ないんじゃないかと思いますが。参考にした記事などあれば教えて下さい。
退会済みユーザー

退会済みユーザー

2018/06/20 05:51

返信ありがとうございます。参考にした書籍は『本気で始めるiPhonアプリ,西麻翁』のp.83を参考にしました
fuzzball

2018/06/20 05:58 編集

その本に「関数bに構造体のインスタンスを引数として渡した場合,関数b内で構造体のプロパティの値を変更しても,関数a内の構造体のプロパティは変更されない」と書かれているんですか?関数bのコードが書かれているなら、それを書いて下さい。
退会済みユーザー

退会済みユーザー

2018/06/20 07:41

コードが何も書かれていないのでどうなのかなと思い質問しました
fuzzball

2018/06/20 07:51

間違っているか、言いたいことをうまく表現出来ていないか、でしょうかね。どちらにしても、takabosoftさんの回答で、その著者さんの言いたいことは伝わると思います。
guest

回答1

0

structは値型、classは参照型という事で振る舞いが違うのは確かです。
fuzzballさんのおっしゃる通り関数に渡した先で構造体の値は変更できない仕様(コンパイルエラー)なので、他の方法をコードで示します。

classの場合:

swift

1 class ClassOrStruct { 2 var prop: Int = 0 3 } 4 5 var original = ClassOrStruct() 6 var clone = original 7 clone.prop = 100 8 9 print(original.prop) // 100

structの場合:

swift

1 struct ClassOrStruct { 2 var prop: Int = 0 3 } 4 5 var original = ClassOrStruct() 6 var clone = original 7 clone.prop = 100 8 9 print(original.prop) // 0

具体的な解説については以下の記事が参考になると思います。
https://qiita.com/koher/items/bcdbf6578b6edd1f9e0c

投稿2018/06/20 04:43

takabosoft

総合スコア8356

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問