在swift中处理选择器参数

时间:2015-08-07 06:55:04

标签: ios swift

假设我在CustomTimer类中声明了一个函数:

class CustomTimer {

    class func scheduledTimerWithSelector(aSelector: Selector) -> CustomTimer {
     // aSelector ??
    }
}

如何处理此aSelector参数?

与NSTimer.scheduledTimerWithTimeInterval方法一样,它的剂量如何?

3 个答案:

答案 0 :(得分:2)

您应该检查Selector结构。 来自apple docs:

  

在Swift中,Objective-C选择器由Selector表示   结构体。您可以使用字符串文字构造选择器,例如   让mySelector:Selector =“tappedButton:”。因为字符串文字   可以自动转换为选择器,可以传递一个字符串   任何接受选择器的方法的文字。

答案 1 :(得分:1)

Swift的选择器功能:

func selectorFunc(aSel:Selector){
    if self.respondsToSelector(aSel){
        NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: aSel, userInfo: nil, repeats: false)
    }
}

func gooleIt(){
    println("Hello")
}

功能调用:

self.selectorFunc(Selector(gooleIt()))

希望对你有所帮助。

答案 2 :(得分:0)

你可以用这样的选择器声明一个方法,你可以通过创建一个UIControl来调用它,因为在Swift中没有performSelector方法:

func methodWithSelector(sel:Selector) {
        var control = UIControl()
        control.sendAction(sel, to: self, forEvent: nil)
}

如果您不需要在主线程上调用它,则另一个选项是这样的:

func methodWithSelector(sel:Selector) {
    NSThread.detachNewThreadSelector(sel, toTarget: self, withObject: nil)
}

你会这样称呼:

methodWithSelector(Selector("methodCall"))

或者像这样

methodWithSelector("methodCall")

然后你必须有一个带选择器名称的方法

func methodCall() {
        println("methodCall")
    }