是通过将代码分离成可重用的组件,以提高代码的可维护性和可扩展性。委托模式是一种设计模式,它允许一个对象在特定事件发生时通知另一个对象,并允许后者对事件做出响应。
在重构CNContactPicker UI代码时,可以使用委托模式来处理联系人选择的结果。以下是一个示例:
首先,创建一个委托协议,用于定义联系人选择结果的回调方法:
protocol ContactPickerDelegate: AnyObject {
func contactPickerDidSelectContact(_ contact: CNContact)
func contactPickerDidCancel()
}
然后,在CNContactPicker的实现中,添加一个委托属性,并在适当的地方调用委托方法:
class ContactPickerViewController: UIViewController {
weak var delegate: ContactPickerDelegate?
func showContactPicker() {
let contactPicker = CNContactPickerViewController()
contactPicker.delegate = self
// 显示联系人选择器
// ...
}
}
extension ContactPickerViewController: CNContactPickerDelegate {
func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
delegate?.contactPickerDidSelectContact(contact)
}
func contactPickerDidCancel(_ picker: CNContactPickerViewController) {
delegate?.contactPickerDidCancel()
}
}
接下来,在使用联系人选择器的地方,实现委托方法来处理选择结果:
class MainViewController: UIViewController {
// ...
func showContactPicker() {
let contactPicker = ContactPickerViewController()
contactPicker.delegate = self
contactPicker.showContactPicker()
}
}
extension MainViewController: ContactPickerDelegate {
func contactPickerDidSelectContact(_ contact: CNContact) {
// 处理选择的联系人
}
func contactPickerDidCancel() {
// 处理取消选择
}
}
通过使用委托模式,可以将联系人选择的逻辑从主视图控制器中分离出来,使代码更加清晰和可维护。此外,委托模式还可以方便地扩展和修改联系人选择的行为,例如添加额外的处理逻辑或者改变选择结果的处理方式。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云