performSelector:withObject:afterDelay:没有按预期传递参数

时间:2018-12-04 05:05:29

标签: swift

我正在使用performSelector来控制控制器中某些方法的执行时间。在这种情况下,我希望传递给animateIntroViews的参数是with的值,但是不是,而是一个像-7878379202283

这样的大量负数。
func runOnRenderAnimations() -> Void {        
    perform(#selector(animateIntroViews), with: 0, afterDelay: 0.5)
    perform(#selector(animateIntroViews), with: 1, afterDelay: 2.5)
}

@objc fileprivate func animateIntroViews(textPosition: Int) -> Void {
    print(textPosition)
}

2 个答案:

答案 0 :(得分:2)

perform不适用于像Int这样的原始类型的参数。

更好的解决方案是使用DispatchQueue asyncAfter。这使您可以正常调用该方法。

func runOnRenderAnimations() -> Void {
    DispatchQueue.main.asyncAfter(deadline: now() + 0.5) {
        self.animateIntroViews(textPosition: 0)
    }
    DispatchQueue.main.asyncAfter(deadline: now() + 2.5) {
        self.animateIntroViews(textPosition: 1)
    }
}

答案 1 :(得分:0)

使用perform选择器,您可以将参数作为NSNumber而不是Int传递,并将其作为Number并将其转换为Int {1}}功能。

示例:

animateIntroViews