什么是.delegate =自我是什么意思?
-
25-09-2019 - |
题
任何人都可以解释someViewController.delegate = self
和self.delegate
意思?他们在哪里帮助我们吗?
解决方案
代表发送消息以你。
例如:如果你使用加速度计委托,您将获得有关加速度计的消息
如果您使用的是新的中微子检测的委托,你会得到任何消息中微子在该地区检测到。
如果您使用弹出式广告,弹出式广告发送给您的邮件。而做到这一点的方式,与弹出的委托。有许多,许多例子。
所以,代表发送消息。
就这么简单。
你可能会问, “它在哪里发送这些消息?”的
答案是这样的:它发送消息给你设置“.delegate”啄
。在“设置委托,”你在做什么是说你想要的消息去了。
因此,
blah.delegate = amazingPlace将消息发送到 “amazingPlace”。
blah.delegate = somewhereElse将消息发送到 “somewhereElse”。
blah.delegate =自将发送消息......的 到你 强>
很多时候,你需要的邮件来“你”,所以你刚才说“blah.delegate =自我”
<强>这是一个非常普遍的错误,忘记行代码。强>
如果您忘记了该行的代码,你都塞。这些消息去的无处,然后你留下摸不着头脑试图找出什么地方出了错。
别的东西,你需要做的:当你使用一个代表,你必须事先宣布,这一点,你要使用代理
那怎么办?
在过去用Objective-C的,你只是做这个...
@interface AppDelegate_Pad : NSObject <UIApplicationDelegate>
@interface BigTop : UIViewController <ASIHTTPRequestDelegate,
UIPopoverControllerDelegate>
@interface Flying : UIViewController <UIAccelerometerDelegate>
您可以看到,“Bigtop发送”想用两名代表,即ASIHTTPRequestDelegate和UIPopoverControllerDelegate。而“飞”只是想用一个委托 - 它要使用加速计
在斯威夫特,它也非常简单 - 你只是一个逗号,则协议:
class YourClass:UIViewController, SomeDelegate, AnotherDelegate
您真的不能做太多的iPhone,而无需使用代表所有的地方。
代表到处使用,并且在IOS所有的时间。
它是完全正常的一个类可能使用一打的代表。
在的例子中“飞”在...之上,在某处对“飞行”的代码,将不得不说...
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
在Bigtop发送的情况下,它必须设置为ASIHttpRequests委托某处,
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:gid forKey:@"gid"];
[request setPostValue:nom forKey:@"nom"];
[request setDelegate:self];
(不要在旧天目标c忘记,x.delegate=self
是完全一样[x setDelegate:self]
。)
<强>如今与夫特强>只需输入
x.delegate = self
,这一切有给它。
这就是你在做什么。代表发送消息即可。你不得不说的其中,您需要的邮件去。最常见的是,你要他们去“你”,所以在这种情况下,你简单地说x.delegate=self
。
希望它帮助。
其他提示
Delegate
用于传递/传送数据/消息的B / W类两个对象。这里,tableView
(发件人)发送数据/消息viewController
(接收器)。
考虑例如在定制UITableView
实施viewController
的
在这里,UITableViewDataSource
&UITableViewDelegate
实际上协议。不幸的是,UIKit Framework
不是开源。但我会提到许多文章后保证这个东西内部发生。
协议是象篮球教练在它的一些要求。他/她通过这些要求告诉球员,像类,结构,枚举what to do?
。但他/她doesn't knows
how to do?
by自理。所以,符合该协议的类或结构应当提供实施这些要求的同时实现扣篮球。
protocol UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
}
一个协议被认为是数据源协议那么它总是包含如下所示与“返回类型”所要求的功能。
protocol UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
}
实施的UITableView内定制的viewController
class viewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
let tableView = UITableView()
override func viewDidLoad {
tableView.delegate = self
tableView.dataSource = self
}
下面,tableView
充当委托者(发送者)&viewController object i.e (self)
作为代表(接收器)。
为了获得UITableView
在viewController
.It应以符合两个协议。
所以,viewController
类对象已经执行两个协议的所有这些需要的功能。现在self
既可以用作UITableViewDelegate
型或UITableViewDataSource
类型,因为协议可以用作类型的符合它的类的对象。
现在,tableView
即delegate
&dataSource
这两种性质被分配给self
因为具有相同的各自的协议类型的。
两个协议的非可选功能中viewController
类对象被实现为以下
协议UITableViewDelegate
功能
func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
// Do further processes like pushing or poping another viewController
}
协议UITableViewDataSource
功能
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
return UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "Cell")
}
1)当用户在一个部分中选择一个行然后tableview
(发件人)即UItableView()
调用由将数据传递到参数显示在下面的UITableViewDelegate
FUNC tableView
&indexPath
通过其viewController
属性驻留在delegate
对象(接收器)。现在viewController
使用这些传递的数据做这样推坡平到新的自定义的viewController进一步处理。
tableView.delegate?.tableView(UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
UITableViewDatasource
协议内部2)功能提供的自定义数据至tableview
(发件人)。所述tableview
通过调用数据源的功能通过其viewController
属性驻留在tableView
对象(接收器)将数据传递到参数indexPath
&viewController
询问datasource
对象。现在viewController
使用这些传递的数据和返回的自定义数据回tableview
。现在tableview
使用这些数据来创建“10”细胞种“小区”一节&在indexpath
tableView.dataSource?.tableView(UITableView, numberOfRowsInSection section: Int) -> returns "10"
tableView.dataSource?.tableView(UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> returns "cell"
最后,整个UIKit Framework
用途委派&在其所有的类,例如UIApplication
,UITableView
,UICollectionView
,UITextField
&等进行数据通信的数据源的设计模式。不幸的是,UIKit Framework
不是开源。
如果在任何情况下,伯恩的回答并不能帮助..委托基本上是一个事件的对象的反应,说:“.delegate =自我”的手段这些协议已经在自我被采纳为... ..如当行中的tableview选择由tableview中的委托方法“didSelectRowAtIndexPath方法”告诉会发生什么......如果一个视图控制器具有实现代码如下.. 和“didSelectRowAtIndexPath方法”在视图 - 控制的定义只有这样,我们会说... tableview.delegate =自我” ...... 和“self.anything”用于地说,“什么”是自我的属性.. 对于如。 的NSString *什么; @属性(非原子,保留)的NSString *任何东西;
然后 “self.anything”