## selfとは、そのクラス自体のことですか?
下記画像にて、self
はCarクラス
を指すのでしょうか?
その場合、青色の線の関係がしっくりくるのですが..????
しかし、他サイトにて
swiftにおいて、クラスのインスタンスメソッド内でのselfは自分自身(クラスのインスタンス)を示します
という解説を見たのですが、どちらが正しいのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
ベストアンサー
『自分自身(クラスのインスタンス)』で正しいです。
画像に書かれている矢印の先の、var color : String
も、
実際にはクラスがインスタンス化された時のインスタンス内部のメンバ変数になりますので、
画像の方も正しいです。
では、「swiftでいうselfとは?意味と使い方の例:Xcode」のサイトに書かれている事柄はいかがでしょうか?
self
がなぜ必要なのか?というと、インスタンスがどこにあるかは動かしてみるまではわからないからです。
クラス自身であれは、コンパイル時には場所が確定しますので、わざわざ変数を使う必要がありません。
インスタンスの場所は、プログラムの実行時にインスタンスが生成された段階でメモリ空間が割り当てられます。
メソッドは実はクラス側にあり、メソッド自身には自分のインスタンスを知る術はありません。
なので、メソッドの呼び出し時に、隠れ引数としてそのインスタンスへの参照がself
に代入されて渡されます。
そういう仕組みなので、『self
はクラスのインスタンスである』というのが正しいです。
「メソッド」は、initメソッドの事でしょうか?
「インスタンス」は、let car = Car(color: "Red", wheel :4) の事でしょうか?
let car = Car(color: "Red", wheel :4)
により、
まずメモリの領域が確保されて、そこにCarクラスのインスタンスが生成されます。
そして自動的にイニシャライザである、init()が呼び出されます。
その時、明記されている引数とは別に、今生成したインスタンスへの参照がself
へと代入されます。
そのおかげで、self.color
と書くことで、
「今作ったばかりのインスタンス」の中の「color
」へとアクセスできます。
その終了後に、戻り値として、インスタンスへの参照が返されて、car
に代入されます。
画像ではなぜ、青下線を繋ぐ赤矢印が成立するのか。
クラスのメンバ変数は、もともとインスタンスが持っている要素だからです。
イメージとしてはクラスはただの型枠なので実体が無く個別のデータを持てません。
インスタンスは型枠に実体を与え、個別のデータを保存するエリアを確保したものです。
Car.color
は、そういう名前の要素が存在するよという情報だけです。
実際のデータは、インスタンス.color
の中に保存されます。
selfを使うと
自クラスの変数にアクセスできる理由。
self
には自インスタンスへの参照が入っていますので、
オブジェクトへの参照.オブジェクトの要素という形式でアクセスできます。
参照をcar
に受け取って、car.color
でその中の要素にアクセスしているのと同じです。
car
もself
も参照を格納しているという点では同じですので。
自クラスの変数(=var color : String)へのアクセスと、
インスタンス(=Car(color: "Red", wheel :4) ) へのアクセスとの関係。
これは具体的に何を聞きたいのかがよくわからなかったです。
投稿2020/08/12 07:21
編集2020/08/12 12:56総合スコア1218
0
文字通り、『自分自身』を指す。
self
と呼ばれるプロパティを全てのインスタンスが持ってます。
それは、自分自身を表します。
投稿2020/09/17 08:41
総合スコア147
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
どちらが正しいのでしょうか?
「自分自身(クラスのインスタンス)を示します」。
投稿2020/08/12 07:13
総合スコア146383
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/12 07:32
2020/08/12 07:33
2020/08/12 12:34 編集
2020/08/12 12:27
2020/08/12 12:33
2020/08/12 13:48 編集