2010-06-05 42 views

回答

14

委托是通常对另一个对象中的某个事件作出反应并且/或者可以影响另一个对象如何表现的对象。这些对象一起工作以完成一项任务。通常,委托对象将由许多其他具有更具体任务的对象共享。代表本身将更加抽象,并且对于不同的任务应该是非常可重用的。包含委托的对象通常在发生触发事件时向委托发送消息,为委托人提供执行其指定任务的机会。

还有更多文档here,您应该阅读这些文档以了解Cocoa和Cocoa touch中的委托模式,特别是如何在UIWindow和UIView之间使用委派。这是iPhone体系结构中的一个整体设计模式,如果您希望设计一个干净的应用程序,应该掌握它。

+2

链接已死 – lindenrovio 2014-05-24 14:10:49

+0

另一个有用的链接在这里 - [链接](https://developer.apple.com/library/ios/documentation/general/conceptual/CocoaEncyclopedia/DelegatesandDataSources/DelegatesandDataSources.html) – 2014-10-16 06:15:19

3

Delegation is a pattern和这个术语在可可中是相同的。

代表未执行in a UIViewController。不同种类的视图控制器都可以委托一个委托来处理某些任务。最好的例子之一(如果我们正在谈论iPhone)是UITableViewDelegate,当某些与表格相关的事件发生时,它被调用来做某些事情。

5

代表用于将对象的任务委托给其所有者(或任何对象,真的)。这样做的一个好的原因是它可以更容易地使用组合而不是继承。委托是对符合指定协议的对象的引用,因此您可以保证它将实现所需的方法。一个很好的例子是UIApplicationDelegate。请注意委托方法(来自协议)是如何使用applicationDid,applicationShould,applicationWill等动词的。通常,委托方法要么需要做某些事情的权限(并且选择这样做,在方法中,而不是只使用BOOL属性,以获得更大的灵活性),或通知代表将发生或发生的事件。

0

委托的概念在iOS中很常见。一个对象通常会依赖另一个对象来完成某些任务。这种关注的分离使得系统变得简单,因为每个对象只做它擅长的事情,并让其他对象处理剩下的事情。表格视图提供了一个很好的例子。

1

委托用于传递/传递类/结构中两个对象的数据以完成任务。 例如:考虑将机密数据发送给第二VC(接收者或代表或秘书)的第一VC(发件人或委托人或CEO)。 这是通过secondVC符合一个

protocol passDataDelegate { func passdata(data: String) } 

class secondVC : UIViewController, passDataDelegate { 
func passdata(data: String) { 
    print("CEO passed //(data)") 
    } 
} 

class firstVC : UIViewController { 
    var delegate : passDataDelegate? 
} 

因为,接收符合协议passDataDelegate现在创建的两个firstVC & secondVC

let sender = firstVC() 
let receiver = secondVC() 

对象完成。因此,它的类型为UIViewControllerpassDataDelegate,因为如果一个类符合协议,那么它的类的对象可以将协议作为类型。

因此,分配sender.delegate = receiver

现在,我们可以CEO(发件人)可以通过其委托财产将数据传递给秘书(接收器)作为

sender.delegate?.passdata("Confidential data") 

Output: CEO passed Confidential data 

现在的秘书(接收器)可以使用该数据完成她的进一步任务。