使用闭包替代委托方法
在使用Objective-C或Swift编写iOS应用程序时,常常需要使用委托模式来实现视图控制器之间的通信。然而,使用委托方法会导致代码重复和可读性问题,解决方法是使用闭包来替代委托方法。
例如,下面是一个使用委托方法来实现视图控制器之间通信的示例代码:
protocol SomeDelegate {
func didSomething()
}
class ViewController: UIViewController {
var delegate: SomeDelegate?
func doSomething() {
// Do something
self.delegate?.didSomething()
}
}
class OtherViewController: UIViewController, SomeDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let viewController = ViewController()
viewController.delegate = self
}
func didSomething() {
// Handle did something
}
}
使用闭包来替代委托方法的写法如下:
class ViewController: UIViewController {
var didSomethingHandler: (() -> Void)?
func doSomething() {
// Do something
self.didSomethingHandler?()
}
}
class OtherViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let viewController = ViewController()
viewController.didSomethingHandler = {
// Handle did something
}
}
}
使用闭包比使用委托方法更简洁且易于阅读。