Селектор - это концепция из Objective-C, которая представляет собой сообщение, которое должно быть отправлено (то есть метод, который будет вызываться) динамически во время выполнения. Когда вы настраиваете что-то, что нужно сделать с помощью селектора, вы знаете, какое сообщение будет отправлено, но не обязательно, каковы его параметры. (И иногда даже не тот объект, на который он будет отправлен.)
Вы можете рассматривать селекторы как относительные замыкания/блоки, так как они позволяют вам упаковать код, который будет вызываться позже, и передать его другой функции , Однако закрытие должно быть указано/разрешено во время компиляции, поэтому оно менее динамично, чем селектор.
Селекторы отлично подходят для концепций «свободной привязки», таких как управляющие действия. Вы можете использовать селектор для выбора в Interface Builder, который метод должен вызывать при нажатии кнопки, даже если ваше приложение фактически не работает в IB; или вы можете сказать, что «эта кнопка должна вызывать paste:
на любом текстовом представлении с фокусом клавиатуры», не зная, когда вы настраиваете кнопку, которая будет выглядеть (потому что фокус клавиатуры меняется все время).
Селекторы в блоках/закрытиях предшественников ObjC, поэтому исторически селекторы были основным способом рассказать о таких вещах API, как «вызвать этот метод позже», поэтому вы найдете их в Cocoa для таких шаблонов, как таймеры, сортировка массивов и отменить, даже если такие шаблоны могут выиграть от жесткой привязки затворов/блоков.
Для получения дополнительной информации об использовании селекторов в Swift см Interacting with Objective-C APIs в Использование Swift с какао и Objective-C и/или this SO answer. Подробнее о селекторах и какао в целом см. Cocoa Core Competencies: Selector.