Я играю с UIMenuController
, где я могу добавить пункт меню, который занимает #selector
в его инициализации.
Теперь я могу захватить вызов в нескольких разных местах и поэтому хочу написать протокол, чтобы убедиться, что каждое место, где я хочу получить действие из цепочки респондента, реализует правильную сигнатуру функции.
Моя проблема в том, как я требую, чтобы разработчики протокола добавили @objc
к функции протокола? В противном случае он не будет вызван.
protocol PrintToConsoleProtocol {
func printToConsole()
}
extension PDFView: PrintToConsoleProtocol {
// PDFView conforms to PrintToConsoleProtocol without @objc!
// So protocol does not make sure the implementor will be callable
// despite having adopted it.
@objc func printToConsole() {
print("Printing to console.. from PDFView!")
}
}
Код для добавления пункта меню:
let printToConsole = UIMenuItem(
title: "Print To Console",
action: #selector(PrintToConsoleProtocol.printToConsole)
)
UIMenuController.shared.menuItems = [printToConsole]