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

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

新規登録して質問してみよう
ただいま回答率
85.50%
iOS 9

iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。

Swift

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

2361閲覧

【swift】クラス名=selfについて教えて下さい

HirotoMorooka

総合スコア12

iOS 9

iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。

Swift

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/10/13 14:47

【=selfについて】

newMessageController.messagesController = self

の意味がよく分かりません。自分自身を代入している?
これは何を表していて、どういう時に使うのでしょうか?

プログラミング始めて間もないので、、、初歩的な部分かもしれませんが、
ご教示頂ければありがたいです!

↓↓↓

func handleNewMessage(){
let newMessageController = NewMessageController()

**newMessageController.messagesController = self** let navController = UINavigationController(rootViewController: newMessageController) presentViewController(navController, animated: true, completion: nil) }

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

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

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

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

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

guest

回答1

0

ベストアンサー

自分自身を代入している?

selfはnewMessageControllerではないです。
selfはそのクラス自身のインスタンスです。おおざっぱですがインスタンスってのは実体化された時の住所情報だと思ってください。たとえば、質問のfunc handleNewMessage()がMyClassというクラスで定義されていれば、selfはMyClassのインスタンスになります。

どういう時に使うのでしょうか?

自身で定義したメソッドをよそのクラスのインスタンスから実行して欲しい時などです。
xxxxx.delegate = self なんてコードをよく見かけると思いますが、これはちゃんと自身にアクセスしてもらえるようにと別クラスのインスタンスに住所を教えてあげているんですね。ここで詳細は書きませんが、UIKitの多くにデリゲートというデザインパターンが採用されています。たとえば、UITableViewはテーブルの見た目を提供してくれますが、中身のデータなどは自分でなんとかしないといけませんよね。こんなときデータの中身に関する処理をViewControllerクラスで用意しておいて、UITableViewのインスタンスからこの処理(メソッド)を実行してもらえばOKなわけですが、そのためにはViewControllerのインスタンス(住所)をUITableViewのインスタンスが知っている必要があります。そのための xxxxx.delegate = self です。

言葉で説明するのは難しい。。。

投稿2016/10/13 19:23

fromageblanc

総合スコア2724

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

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

HirotoMorooka

2016/10/14 02:55

ありがとございます!丁寧な解説ためになります! class ◯◯◯ { xxxxx.delegate = self } ・xxxxxで定義したメソッドを◯◯◯内で使うための処理である ・selfに入っているのは☓☓☓☓☓のインスタンスである ・「呼び出し先」に「呼び出し元」の住所を教えるための処理 「お前を読んでいるのは俺だよ(self=呼び出し元のクラスのインスタンス)」 こんなイメージでしょうか汗??
fromageblanc

2016/10/14 03:35

うっかりだとは思いますが、xxxxxと◯◯◯が逆になってます。
fromageblanc

2016/10/14 03:37

・◯◯◯で定義したメソッドをxxxxx内で使うための処理である ・selfに入っているのは◯◯◯のインスタンスである
HirotoMorooka

2016/10/14 04:17

あ、、、、すいません。そもそもの自分の理解が完全に間違っていました。 これは、「呼び出される側」の処理なんですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問