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

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

ただいまの
回答率

90.53%

  • Swift

    8581questions

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

  • Swift 2

    1337questions

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

  • iOS 9

    215questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 838

【=selfについて】

newMessageController.messagesController = self

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

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

↓↓↓
func handleNewMessage(){
let newMessageController = NewMessageController()

newMessageController.messagesController = self

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/14 11:55

    ありがとございます!丁寧な解説ためになります!

    class ◯◯◯ {

    xxxxx.delegate = self
    }

    ・xxxxxで定義したメソッドを◯◯◯内で使うための処理である
    ・selfに入っているのは☓☓☓☓☓のインスタンスである
    ・「呼び出し先」に「呼び出し元」の住所を教えるための処理

    「お前を読んでいるのは俺だよ(self=呼び出し元のクラスのインスタンス)」

    こんなイメージでしょうか汗??

    キャンセル

  • 2016/10/14 12:35

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

    キャンセル

  • 2016/10/14 12:37

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

    キャンセル

  • 2016/10/14 13:17

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

    キャンセル

同じタグがついた質問を見る

  • Swift

    8581questions

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

  • Swift 2

    1337questions

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

  • iOS 9

    215questions

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