Как идентифицировать делегирующий объект

#swift #delegation

#swift #делегирование

Вопрос:

Я использую делегирование и использую один и тот же класс двумя разными способами.

     protocol ColorSwitchDelegate {
        func colorSwitched(picker: ColorSwitch, color: ColorChoice)
    }

    class ColorSwitch: UIView {    
        var delegate: ColorSwitchDelegate?

    func doSomething() {
    delegate?.colorSwitched(picker: self, color: color)
    }
    }

    class SettingsViewController: UIViewController, ColorSwitchDelegate {

    @IBOutlet weak var myView1: ColorSwitch!
    @IBOutlet weak var myView2: ColorSwitch!

    func viewWillAppear(_ animated: Bool) {

     myView1.delegate = self
     myView2.delegate = self
    }



  func colorSwitched(picker: ColorSwitch, color: ColorChoice) {
            // I want to find out if myView1 or myView2 is the delegating object
    }
    }
 

Я хочу определить, какое представление (myView1 или myView2) является делегатором. Я мог бы добавить тег в класс ColorSwitch, но это кажется неэлегантным. Есть ли лучший способ?

Комментарии:

1. вы можете проверить, является ли picker == self.myView1 { } . но я думаю, что добавление тега является лучшим.

2. Извините, я уточнил свой код. Как для myView1, так и для myView2 для делегата установлен параметр SettingsViewController. Поэтому я не могу проверить значение nil.

3. if picker === myView1 { // do something with 1 } else if picker === myView2 { // do something with 2 }

4. Потрясающе, оба ваших решения работают, спасибо!

Ответ №1:

Вы можете напрямую проверить, colorSwitched используя identity opeartor === который проверяет, ссылаются ли две ссылки на объекты на один и тот же экземпляр объекта.

 func colorSwitched(picker: ColorSwitch, color: ColorChoice) {
   if picker === self.myView1 { 

     //myView1
    } else {

     //myView2

    } 

}