web-dev-qa-db-ja.com

.delegate = selfとはどういう意味ですか?

誰かがsomeViewController.delegate = selfself.delegateの意味を説明できますか?彼らはどこで私たちを助けますか?

37
Rajkanth

デリゲートメッセージを送信あなたに。

たとえば、加速度計デリゲートを使用すると、加速度計に関するメッセージが表示されます。

新しいニュートリノ検出デリゲートを使用すると、そのエリアで検出されたニュートリノに関するメッセージが表示されます。

PopUpsを使用する場合、PopUpsからメッセージが送信されます。そして、それが行われる方法は、PopUpのデリゲートです。多くの例があります。

したがって、デリゲートはメッセージを送信します。

とても簡単です。

「これらのメッセージはどこに送信されますか?」

答えはこれです。「。delegate」を設定した場所にメッセージを送信します。

「代理人を設定する」とは、メッセージの送信先を言っていることを意味します。

したがって、

blah.delegate = amazingPlaceはメッセージを「amazingPlace」に送信します。

blah.delegate = somewhereElseは、メッセージを「somewhereElse」に送信します。

blah.delegate = selfはメッセージを送信します...... to you

たいていの場合、メッセージが「あなた」に届くようにしたいので、「blah.delegate = self」と言うだけです。

そのコード行を忘れることはよくある間違いです。

そのコード行を忘れると、詰め物ができます。メッセージはnowhereになり、何が問題だったかを理解しようとして頭を悩ませています。

あなたがしなければならない何か:デリゲートを使うとき、あなたは事前にアナウンスしなければならない、それはデリゲートを使いたいということです。

どうやってするか?

昔のobjective-cでは、あなたはこれをしました...

@interface AppDelegate_Pad : NSObject <UIApplicationDelegate>
@interface BigTop : UIViewController <ASIHTTPRequestDelegate,
                                        UIPopoverControllerDelegate>
@interface Flying : UIViewController <UIAccelerometerDelegate>

「BigTop」が2つのデリゲート、つまりASIHTTPRequestDelegateとUIPopoverControllerDelegateを使用したいことがわかります。一方、「Flying」は1つのデリゲートのみを使用したいのですが、加速度計を使用したいと考えています。

Swiftの場合、これは簡単なことではありません。次のように、プロトコルにカンマを付けるだけです。

 class YourClass:UIViewController, SomeDelegate, AnotherDelegate

デリゲートをあちこちに使用しないと、iPhoneで多くのことを行うことはできません。

デリゲートは、iOSの至るところで使用されています。

クラスが1ダースのデリゲートを使用することは完全に正常です。

上記の「Flying」の例では、「Flying」のコードのどこかに、次のように記述する必要があります...

[[UIAccelerometer sharedAccelerometer] setDelegate:self];

BigTopの場合、ASIHttpRequestsのどこかにデリゲートを設定する必要があります。

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:gid forKey:@"gid"];
[request setPostValue:nom forKey:@"nom"];
[request setDelegate:self];

(objective-cを使用して昔は忘れないでください。x.delegate=self[x setDelegate:self]とまったく同じでした。)

Nowidays with Swift入力するだけ

  x.delegate = self

これですべてです。

それがあなたがしていることです。デリゲートメッセージを送信whereとメッセージを送信する必要があります。非常に一般的に、あなたは彼らに「あなた」に行きたいので、その場合は単にx.delegate=selfと言うだけです。

それが役に立てば幸い。

87
Fattie