Является ли данная запись корректной в Swift

Код некорректен: у UIView нет addTarget, #selector не принимает вызов foo: 1, а инициализатор подкласса должен корректно вызвать super.

Короткий ответ

Что ответить на собеседовании

Код некорректен: у UIView нет addTarget, #selector не принимает вызов foo: 1, а инициализатор подкласса должен корректно вызвать super.

Подробный разбор

Ответ с пояснениями

Условие

В примере ниже создаётся подкласс UIView. В конструкторе вызывается метод addTarget с передачей текущего объекта и селектора, где в качестве аргумента указано число 1. Нужно определить, компилируется ли такой код и соответствует ли он правилам использования #selector в Swift.

class View: UIView {
    init() {
        self.addTarget(for: self, #selector(foo: 1))
    }
}

Ответ

Код некорректен: у UIView нет addTarget, #selector не принимает вызов foo: 1, а инициализатор подкласса должен корректно вызвать super.

Для target-action используйте UIControl/UIButton:

button.addTarget(self, action: #selector(foo(_:)), for: .touchUpInside)

@objc private func foo(_ sender: UIButton) {
    // Использовать sender или состояние контроллера.
}

Эти строки размещаются соответственно в методе настройки и теле класса. Для UIView добавьте UITapGestureRecognizer. В собственном подклассе требуется корректный init(frame:) с вызовом super и реализация required init?(coder:). Число 1 не кодируется в селекторе: селектор указывает метод, аргумент события передаёт вызывающий механизм.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее