任何人都可以解释someViewController.delegate = selfself.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的 在这里,UITableViewDataSourceUITableViewDelegate实际上协议。不幸的是,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)作为代表(接收器)。

为了获得UITableViewviewController.It应以符合两个协议。

所以,viewController类对象已经执行两个协议的所有这些需要的功能。现在self既可以用作UITableViewDelegate型或UITableViewDataSource类型,因为协议可以用作类型的符合它的类的对象。 现在,tableViewdelegatedataSource这两种性质被分配给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 tableViewindexPath通过其viewController属性驻留在delegate对象(接收器)。现在viewController使用这些传递的数据做这样推坡平到新的自定义的viewController进一步处理。

tableView.delegate?.tableView(UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)

UITableViewDatasource协议内部2)功能提供的自定义数据至tableview(发件人)。所述tableview通过调用数据源的功能通过其viewController属性驻留在tableView对象(接收器)将数据传递到参数indexPathviewController询问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用途委派&在其所有的类,例如UIApplicationUITableViewUICollectionViewUITextField&等进行数据通信的数据源的设计模式。不幸的是,UIKit Framework不是开源。

如果在任何情况下,伯恩的回答并不能帮助..委托基本上是一个事件的对象的反应,说:“.delegate =自我”的手段这些协议已经在自我被采纳为... ..如当行中的tableview选择由tableview中的委托方法“didSelectRowAtIndexPath方法”告诉会发生什么......如果一个视图控制器具有实现代码如下.. 和“didSelectRowAtIndexPath方法”在视图 - 控制的定义只有这样,我们会说... tableview.delegate =自我” ...... 和“self.anything”用于地说,“什么”是自我的属性.. 对于如。 的NSString *什么; @属性(非原子,保留)的NSString *任何东西;

然后 “self.anything”

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top