36 cocoa delegates protocols delegation objective-c
任何人都可以解释的意义someViewController.delegate = self和self.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.
希望能帮助到你.