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

时间:2014-06-28 16:01:41

标签: ios swift

我试图用快速语言创建一个等价的下面的方法签名(Objective-C)。我无法得到如何获得正确的等价物的答案。任何帮助都非常感谢。

- (void)myMethod:(MyObject*)firstParam
                        setCallbackObject:(id)obj
                        withMySelector:(SEL)selector {
    [obj performSelector:selector withObject:nil afterDelay:0]
}

1 个答案:

答案 0 :(得分:1)

首先:

NOTE

  

在Swift中不导入performSelector:方法和相关的选择器调用方法,因为它们本质上是不安全的。

如果您仍想以这种方式实施,请阅读以下内容。


您可以使用NSTimer

var myTimer: NSTimer = NSTimer.scheduledTimerWithTimeInterval(0.0, target: self, selector: "selectorMethod", userInfo: nil, repeats: false)

可以在需要Selector的地方使用字符串。它将自动转换(自动装箱)。

延迟当然可以更高:0.1则等于十分之一秒。

调用类似的方法:

func selectorMethod() {
    ...
}

我们需要在使用类上的选择器之前进行检查。但是respondsToSelector:NSObject协议中,所以你必须至少从那个派生(或者从它的子类派生)。

为清楚起见,这是一个例子。

代码:

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

输出:

  

workingProgram以退出代码结束:0