我试图用快速语言创建一个等价的下面的方法签名(Objective-C)。我无法得到如何获得正确的等价物的答案。任何帮助都非常感谢。
- (void)myMethod:(MyObject*)firstParam
setCallbackObject:(id)obj
withMySelector:(SEL)selector {
[obj performSelector:selector withObject:nil afterDelay:0]
}
答案 0 :(得分:1)
首先:
在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