Делегирование!)

protocol
swift
ios

#1

Доброго времени суток, не совсем понятно, для чего необходимо делегирование. Допустим приведенный тут пример http://www.vladkhambir.com/delegate_swift/ почему мы не можем использовать не делегат класса, а собсдтвенно сам класс и использовать его методы?


#2

Суть делегирования - передать ответственность за выполнение поведения связанному объекту.

Например у вас есть кастомный UI состоящий из UITextField и UIButton:

Этот UI не знает кто его будет использовать (какой контроллер), но при нажатии на кнопку, вам необходимо об этом сообщать контроллеру и передавать в него текст из UITextField, делегирование один из вариантов решения этой проблемы:

protocol MyViewDelegate: class {
    func didChange(_ text: String)
}

class MyView: UIView {
    
    @IBOutlet weak var textField: UITextField!
    
    weak var delegate: MyViewDelegate?
    
    @IBAction func action() {
        delegate?.didChange(textField.text!)
    }
    
}
class ViewController: UIViewController, MyViewDelegate {

    @IBOutlet weak var myView: MyView! {
        didSet { myView.delegate = self }
    }
    
    // MARK: - MyViewDelegate
    
    func didChange(_ text: String) {
        print(text)
    }
}


#3

Получается myView реализует делегат, а другой класс его использует и мы к нашему классу добавляем функционал myView! Понял, спасибо за а пример, который действительно можно использовать. Нет ли ещё какого-нибудь примера из жизни?)


#4