iphone中委托的确切含义是什么?如何在UIViewController中实现?
答案 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
。因此,它的类型为UIViewController
或passDataDelegate
,因为如果一个类符合协议,那么它的类的对象可以将协议作为类型。
因此,请指定sender.delegate = receiver
现在,我们可以让CEO(发送者)通过其委托属性将数据传递给秘书(接收者)
sender.delegate?.passdata("Confidential data")
Output: CEO passed Confidential data
现在,秘书(接收方)可以使用该数据完成她的进一步任务。
答案 4 :(得分:0)
委派的概念在iOS中很常见。对象通常依赖于另一个对象来帮助它完成某些任务。这种关注点的分离使系统变得简单,因为每个对象只做它擅长的事情,并让其他对象处理其余的事情。表格视图提供了一个很好的例子。