什么是iPhone中的代表?

时间:2010-06-05 03:13:11

标签: iphone delegates

iphone中委托的确切含义是什么?如何在UIViewController中实现?

5 个答案:

答案 0 :(得分:14)

委托是一个对象,它通常会对另一个对象中的某个事件做出反应,并且/或者会影响另一个对象的行为方式。这些对象协同工作,以便更好地完成任务。通常,委托对象将由许多其他具有更具体任务的对象共享。委托本身将更加抽象,并且应该可以非常适用于不同的任务。包含委托的对象通常在发生触发事件时向委托发送消息,从而为委托者提供执行其指定任务的机会。

你应该阅读更多文档here来理解Cocoa和Cocoa touch中的委托模式,特别是在UIWindow和UIView之间如何使用委托。它是iPhone架构中不可或缺的设计模式,如果您希望设计一个干净的应用程序,应该掌握它。

答案 1 :(得分:5)

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

答案 2 :(得分:3)

Delegation is a pattern,这个词在Cocoa中意味着相同。

代理人未在 UIViewController中实施。不同类型的视图控制器assign是一个代理来处理某些任务。最好的例子之一(如果我们正在谈论iPhone)是UITableViewDelegate,当某些与表相关的事件发生时,它会被调用来做某些事情。

答案 3 :(得分:1)

委托用于与类/结构的两个对象进行通信/传递数据以完成任务。 例如:考虑将机密数据发送给secondVC(接收方或代表或秘书)的firstVC(发送方或委托方或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?
}

现在创建firstVC和amp;的对象secondVC

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

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

因此,请指定sender.delegate = receiver

现在,我们可以让CEO(发送者)通过其委托属性将数据传递给秘书(接收者)

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

Output: CEO passed Confidential data

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

答案 4 :(得分:0)

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