gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:22:32 26 4
gpt4 key购买 nike

我正在尝试用 swift 语言创建与以下方法签名 (Objective-C) 等效的方法。我无法得到关于如何为此获得正确等价物的答案。非常感谢任何帮助。

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

最佳答案

首先:

NOTE

The performSelector: method and related selector-invoking methods are not imported in Swift because they are inherently unsafe.

如果您仍想以这种方式实现它,请阅读下文。


你可以使用 NSTimer:

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

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

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

调用方法如下:

func selectorMethod() {
...
}

我们需要在类上使用选择器之前进行检查。但是 respondsToSelector: 位于 NSObject 协议(protocol)中,因此您必须至少从它派生(或从它派生的子类)。

为了清楚起见,这里是示例。

代码:

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

输出:

workedProgram ended with exit code: 0

关于ios - 如何在 swift 中使用 performSelector 实现回调/选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24468577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com