timer scheduled swift - 自我标识错误

时间:2018-03-22 12:14:12

标签: swift

我试图做一个"睡眠"用于通过更新变量实时更新我的​​UI显示的功能。 使用xcode 9.2 swift 4

ES6

我收到此错误:

  

使用未解析的标识符' self'

感谢百万!

2 个答案:

答案 0 :(得分:1)

选择器静态标识函数。你不能从论证中选出一个选择器。

也许这样的事情会更好:

func sleep(time: Double, closure: @escaping (Timer) -> (Void) ) {
    _ = Timer.scheduledTimer(withTimeInterval: time, repeats: false) { timer in
        closure(timer)
    }
}

答案 1 :(得分:0)

关于您的错误,此功能可能超出了selfunresolved identifier的类。函数应该在类体内。

接下来的一点是你以错误的方式制作选择器。选择器将是在同一类中定义的方法。

另一点是你在下一行是invalidating计时器,所以它永远不会执行。

如果您的应用支持iOS Version >= 10.0

func sleep(time: Double, closure: @escaping (Timer) -> (Void) ) {
    Timer.scheduledTimer(withTimeInterval: time, repeats: false) { (timer) in
       closure(timer)
    }
}

如果您的应用支持iOS Version < 10.0

在你的课堂上制作一些属性:

typealias TimerCallBack = (_ timer: Timer) -> Void
var timer: Timer!
var callBack: TimerCallBack!

然后

func sleep(time: Double, closure: @escaping TimerCallBack) {
     self.callBack = closure
     self.timer = Timer.scheduledTimer(timeInterval: time, target: self, selector: #selector(timerFired(_:)), userInfo: nil, repeats: false)
}

@objc func timerFired(_ timer: Timer) {
    if callBack != nil {
        callBack(self.timer)
    }
}