目前我这样做,
将选择器调用为:
NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "startAnimation:", userInfo: loadingView, repeats: true)
选择器方法如下:
private class func startAnimation(timer:NSTimer){
var loadingCircularView = timer.userInfo as UIView
}
我收到警告,应用程序崩溃了:
warning: object 0x67c98 of class ‘ClassName’ does not implement methodSignatureForSelector: -- trouble ahead Unrecognized selector +[ClassName startAnimation:]
答案 0 :(得分:4)
1。您可以按照以下方式编写您的功能:
@objc private class func startAnimation() {}
或
dynamic private class func startAnimation() {} // not recommended
当您将swift函数声明为动态时,您将其视为Objective-C函数(Objective-C跟随动态调度),或者我们可以说,该函数现在是一个动态调度函数,可以在Selector中调用。
但在这种情况下,我们只需要让这个函数有一个动态特征,所以声明它为 @objc 就足够了。
2. 如果您将函数编写为
@objc private func xxxxx(){}
NSTimer中的目标应为 self ,但如果您将函数编写为
@objc private class func xxxx(){} // Assuming your class name is 'MyClass'
NSTimer中的目标应为 MyClass.self 。
答案 1 :(得分:4)
如果将类函数更改为实例函数,可以使用它:
performSelector(Selector(extendedGraphemeClusterLiteral: "aVeryPrivateFunction"))
注意:请务必使用@objc
标记您的私人功能:
@objc private func aVeryPrivateFunction(){
print("I was just accessed from outside")
}
了解更多here
答案 2 :(得分:3)
您无法使用选择器调用私有方法。这就是将方法设为私有的重点,因此无法从外部访问它们。
您还发送了calc()
的实例作为类方法的目标,这就是为什么它不起作用的原因。您需要发送一个类或从方法中删除类。
答案 3 :(得分:1)
当类声明解决了我的问题时添加NSObject。
价:NSTimer scheduledTimerWithTimeInterval and target is "class level function"
class MyClass:NSObject{}
并将方法调用为,
NSTimer.scheduledTimerWithTimeInterval(0.5, target: ClassName.self, selector: Selector("startAnimation"), userInfo: nil, repeats: true)
class func startAnimation(){}