什么是.delegate = self?
任何人都可以解释someViewController.delegate = self
和self.delegate
的含义? 他们在哪里帮助我们?
代表向您发送消息 。
例如:如果您使用加速度计委托,您将收到关于加速度计的消息。
如果你使用这个新的中微子探测代表,你会得到关于在该地区探测到的任何中微子的信息。
如果您使用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>
你可以看到'BigTop'想要使用两个委托,即ASIHTTPRequestDelegate和UIPopoverControllerDelegate。 而“飞行”只想使用一个代表 – 它想要使用加速度计。
在Swift中 ,它不是那么容易 – 你只需要一个逗号,然后是协议:
class YourClass:UIViewController, SomeDelegate, AnotherDelegate
如果不使用代表,iPhone就不能在iPhone上做太多的事情。
代表使用在任何地方,并始终在iOS。
class级可能会使用十几名代表是完全正常的。
在上面的“飞行”的例子中,在“飞行”代码的某处,它不得不说[[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]
完全一样。)
现在使用Swift ,只需键入
x.delegate = self
这就是它的全部。
所以这就是你在做什么。 代表发送消息 。 你必须说你想要的消息去。 非常典型的,你希望他们去“你”,所以在这种情况下,你只需要说x.delegate=self
。
希望它有帮助。
如果在任何情况下,伯恩的答案没有帮助..一个代表基本上是一个事件对一个对象的反应,并说“.delegate =自我”意味着这些协议已被采纳在自我…例如..会发生什么时tableview的委托方法“didSelectRowAtIndexPath”…select一行,如果一个viewcontroller有一个tableview ..和“didSelectRowAtIndexPath”定义在该viewcontroller,那么我们会说… tableview.delegate = self“ …和“self.anything”用于说“任何东西”是自我的属性..例如NSString *任何; @属性(非primefaces,保留)NSString *任何;
那么“self.anything”