.delegate = self是什么意思?

36 cocoa delegates protocols delegation objective-c

任何人都可以解释的意义someViewController.delegate = selfself.delegate?他们在哪里帮助我们?

Fat*_*tie 87

代表们发送消息.

例如:如果您使用加速计代表,您将收到有关加速度计的消息.

如果您使用新的中微子检测代表,您将收到有关该区域中检测到的任何中微子的消息.

如果您使用PopUps,PopUps会向您发送消息.完成的方式是使用PopUp的委托.有很多很多例子.

所以,代表们发送消息.

就这么简单.

你可能会问,"它在哪里发送这些消息?"

答案是:它将消息发送到您设置".delegate"的地方.

当你"设置代理"时,你正在做的是说你想要消息的去向.

因此,

blah.delegate = amazingPlace会将消息发送到"amazingPlace".

blah.delegate = somewhereElse会将消息发送到"somewhereElse".

blah.delegate = self会发送消息...... 给你.

很多时候,你希望消息来到"你",所以你只要说"blah.delegate = self"

忘记那行代码是一个非常常见的错误.

如果你忘记了这行代码,那么你就被塞满了.这些消息无处可去,你在试图弄清楚出了什么问题的时候一直在摸不着头脑.

你需要做的其他事情:当你使用委托时,你必须事先宣布,你想要使用委托.

怎么做?

在Objective-c的旧时代,你刚刚做到了这一点......

@interface AppDelegate_Pad : NSObject <UIApplicationDelegate>
@interface BigTop : UIViewController <ASIHTTPRequestDelegate,
                                        UIPopoverControllerDelegate>
@interface Flying : UIViewController <UIAccelerometerDelegate>
Run Code Online (Sandbox Code Playgroud)

您可以看到'BigTop'想要使用两个委托,即ASIHTTPRequestDelegate和UIPopoverControllerDelegate.而'Flying'只想使用一个代表 - 它想要使用加速度计.

在Swift中,它可能不容易 - 你只需要一个逗号然后是协议:

 class YourClass:UIViewController, SomeDelegate, AnotherDelegate
Run Code Online (Sandbox Code Playgroud)

如果不在整个地方使用代表,你就无法在iPhone上做太多事情.

代表随处可见,并且一直在iOS中使用.

一个班级可能会使用十几个代表是完全正常的.

在上面的"飞行"的例子中,在"飞行"代码的某处,它不得不说......

[[UIAccelerometer sharedAccelerometer] setDelegate:self];
Run Code Online (Sandbox Code Playgroud)

在BigTop的情况下,它必须在ASIHttpRequests的某处设置委托,

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:gid forKey:@"gid"];
[request setPostValue:nom forKey:@"nom"];
[request setDelegate:self];
Run Code Online (Sandbox Code Playgroud)

(过去不要忘记带有objective-c,与之x.delegate=self完全相同[x setDelegate:self].)

现在有了Swift,你只需输入即可

  x.delegate = self
Run Code Online (Sandbox Code Playgroud)

这就是它的全部.

这就是你正在做的事情.代表发送消息.你不得不说那里你想要的信息去.通常,你希望他们去"你",所以在这种情况下你只是说x.delegate=self.

希望能帮助到你.

  • 顺便说一下,中性检测代表并不是真的.你必须自己写. (7认同)
  • 很好的答案.你能举一个例子,在另一方面,何时需要(以及它意味着)将委托设置为其他东西?(即当你不使用`self`时会发生什么) (3认同)
  • 当然!你是一个"房子".你做了一个"房间".房间从某些东西获得代表信息(比方说,"温度计").所以基本上,IN"HOUSE",你会做房间,然后你会说"设置温度计代表到房间".要么 !!!!!简单地说,在"房间"中,当它被初始化时,你可以说"设置温度计委托给自己"!它完全一样,看!希望能帮助到你!! (2认同)
  • 多么美妙的解释——它让我想起了我曾经拥有的最好的老师。如果您有空闲时间,那么我有一个关于相关主题的新问题 /sf/ask/3447232351/ 我欢迎您的回复。 (2认同)