У меня есть код, как это:Быстрое селектор для функции протокола?
protocol FooP {
...
}
extension FooP {
func doFoo() {
print("foo")
}
func doFoo(timer: NSTimer) {
doFoo()
}
}
class A : NSObject, UITableViewDataSource, FooP {
var timer : NSTimer?
...
func startUpdating() {
timer = NSTimer.scheduledTimerWithTimeInterval(
1.0,
target: self,
selector: Selector("doFoo:"),
userInfo: nil,
repeats: true
)
}
}
К сожалению, он выходит из строя, когда я начинаю таймер аварий программ с
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[xyz.A doFoo:]: unrecognized selector sent to instance 0x7fb2041c4ac0'
Как я могу заставить его работать (я хочу сохранить реализацию doFoo внутри протокола) ?
Если я переведу doFoo в определение класса, все работает нормально, но, как я уже сказал, я хочу реализовать эту функцию внутри протокола.
Другими словами, мне нужно селектор, который говорит
"Hey I point to function named "doFoo" that is implemented as extension to FooP"
Сейчас селектор кажется сказать
"Hey I point to function named "doFoo" that is implemented in A class"
Возможный дубликат ["Непризнанный селектор, посланный экземпляру" в быстром режиме) (http://stackoverflow.com/questions/24094620/unrecognized-selector-sent-to-instance-in-swift) – Matheno
Нет, моя проблема в том, что таймер не видит функций, реализованных в качестве расширений для протокола – Pikacz
У меня была та же проблема. у вас есть решение? Я просто реализую funciton в своем классе на данный момент –