我正在尝试创建一个NSTimer
in Swift
但我遇到了一些麻烦.
NSTimer(timeInterval: 1, target: self, selector: test(), userInfo: nil, repeats: true)
Run Code Online (Sandbox Code Playgroud)
test()
是同一个类中的函数.
我在编辑器中收到错误:
找不到接受提供的参数的'init'的重载
当我改变selector: test()
到selector: nil
错误消失.
我试过了:
selector: test()
selector: test
selector: Selector(test())
但没有任何作用,我在参考文献中找不到解决方案.
在大多数情况下,Swift在类型安全方面是对Objective-C的巨大改进.一个明显的例外是选择器.在Objective-C中,使用表达式@selector(notARealSelector:)
会给出编译器警告.Swift等价物Selector("notARealSelector:")
将始终编译但在运行时将失败.
是否有一种在Swift中使用选择器的类型安全方法,所以我可以使用需要它们的Objective-C API?
我的NSNotification
应用程序中有很多观察者,并希望进行某种编译时检查,我不会在我的选择器中输入拼写错误.
编辑:具体用例是NSNotificationCenter.addObserver
.