Ios 如何在swift中使用performSelector实现回调/选择器?

Ios 如何在swift中使用performSelector实现回调/选择器?,ios,swift,Ios,Swift,我正试图用swift语言创建一个等价的方法签名(Objective-C)。我找不到一个关于如何为这个找到合适的等价物的答案。非常感谢您的帮助 - (void)myMethod:(MyObject*)firstParam setCallbackObject:(id)obj withMySelector:(SEL)selector { [obj performSelector:selector w

我正试图用swift语言创建一个等价的方法签名(Objective-C)。我找不到一个关于如何为这个找到合适的等价物的答案。非常感谢您的帮助

- (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"))