Как использовать #selector в Swift 2.2 для первого респондента без класса?
Я хочу отправить doSomething
к firstResponder
, который может быть любым из нескольких объектов.
menuItem = NSMenuItem(title: "Do Something!",
action: Selector("doSomething"),
keyEquivalent: "")
Я использовал Selector("doSomething")
до Swift 2.2. Как мне это сделать сейчас?
2 ответа
Решение
Создать протокол с помощью селектора doSomething
и имейте все свои объекты, которые могут быть первыми респондентами, соответствовать этому. Затем реализуйте селектор для ваших классов.
@objc protocol MyProtocol {
func myCoolFuncThatManyObjectsRespondTo()
}
extension NSObject: MyProtocol {
func myCoolFuncThatManyObjectsRespondTo() {
print("Sup?")
}
}
let menuItem = NSMenuItem(title: "Do Something!", action: #selector(MyProtocol.myCoolFuncThatManyObjectsRespondTo), keyEquivalent: "")
#selector({classname}.{methodname}{signature})
func doSomething() {}
#selector(MyClass.doSomething)
func doSomething(arg: String) {}
#selector(MyClass.doSomething(_:))
func doSomething(arg: String, withSomething something: Int) {}
#selector(MyClass.doSomething(_:withSomething:))
Обратите внимание, что выбранный метод должен быть соединен с Objective-C, так что либо MyClass
должен продлить NSObject
или добавить @objc
аннотация к методу.