Ios 如何在swift中使用performSelector实现回调/选择器?
我正试图用swift语言创建一个等价的方法签名(Objective-C)。我找不到一个关于如何为这个找到合适的等价物的答案。非常感谢您的帮助Ios 如何在swift中使用performSelector实现回调/选择器?,ios,swift,Ios,Swift,我正试图用swift语言创建一个等价的方法签名(Objective-C)。我找不到一个关于如何为这个找到合适的等价物的答案。非常感谢您的帮助 - (void)myMethod:(MyObject*)firstParam setCallbackObject:(id)obj withMySelector:(SEL)selector { [obj performSelector:selector w
- (void)myMethod:(MyObject*)firstParam
setCallbackObject:(id)obj
withMySelector:(SEL)selector {
[obj performSelector:selector withObject:nil afterDelay:0]
}
第一:
performSelector:方法和相关的选择器调用方法不会导入到Swift中,因为它们本质上是不安全的
如果您仍然想以这种方式实现它,请阅读下面的内容
您可以使用
NSTimer
:
var myTimer: NSTimer = NSTimer.scheduledTimerWithTimeInterval(0.0, target: self, selector: "selectorMethod", userInfo: nil, repeats: false)
字符串可用于需要选择器的位置。它将自动转换(自动装箱)
延迟当然可以更高:0.1等于十分之一秒
要调用以下方法:
func selectorMethod() {
...
}
在类上使用选择器之前,我们需要进行检查。但是respondsToSelector:
在NSObject
协议中,因此您必须至少从中派生(或者从中派生一个子类)
为了说明这一点,下面是一个例子
代码:
输出:
workedProgram已结束,退出代码为:0
在Swift中,函数只是命名为闭包,因此您可以按名称传递函数!用示例代码更新了答案。如果我被否决,可能还不够清楚:-(
class Test {
func myMethod(firstParam: String, setCallbackObject obj: AnyObject, withMySelector selector: Selector) {
if obj.respondsToSelector(selector) {
var myTimer: NSTimer = NSTimer.scheduledTimerWithTimeInterval(0.0, target: obj, selector: selector, userInfo: nil, repeats: false)
myTimer.fire()
} else {
println("Warning: does not respond to given selector")
}
}
}
class Test2: NSObject {
func selectorMethod() {
print("worked")
}
}
var test: Test = Test()
var callBackObj: Test2 = Test2()
test.myMethod("thisfirstis", setCallbackObject: callBackObj, withMySelector: Selector("selectorMethod"))