我在我的雨燕类下面的实例方法Sentence,这使得呼叫给NSTimer它调用的类实例方法,它的选择.当我在没有断点的情况下运行程序时,它会NSTimer成功地进入第一个程序,然后停止NSTimer.当我添加断点以查看是否sentenceDidFinish曾被调用时,我发现它永远不会被证明它在第一次停止时停止NSTimer.
class Sentence : NSObject {
//init() etc.
func playEvent(eventIndex : Int){
if (eventIndex < 2){
let currEvent = self.eventArray[eventIndex]
currEvent.startEvent()
let nextIndex = eventIndex + 1
print("Play Event event id is ", eventIndex)
NSTimer.scheduledTimerWithTimeInterval(currEvent.duration, target: self, selector: Selector("playEvent:"), userInfo: NSNumber(integer: nextIndex), repeats: false)
}
else if (eventIndex==2){
self.eventArray[eventIndex].startEvent()
print("Play Event event id is ", eventIndex)
NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: Selector("sentenceDidFinish"), userInfo: nil, repeats: false)
}
else{
//DO Nothing
}
}
func sentenceDidFinish(){
//foo
//bar
}
}
Run Code Online (Sandbox Code Playgroud)
这是完整的.swift文件:
playEvent:使用计时器调用时,传递的参数将是计时器本身,而不是整数.但是在声明中eventIndex你表现得好像是整数.
尝试添加这样的方法:
func handleTimer(timer: NSTimer) {
playEvent(timer.userInfo as! Int)
}
Run Code Online (Sandbox Code Playgroud)
然后像这样调用第一个计时器:
NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: "handleTimer:", userInfo: NSNumber(integer: nextIndex), repeats: false)
Run Code Online (Sandbox Code Playgroud)
as!如果userInfo不能转换为强制转换()将崩溃Int.更安全,但更详细看起来像:
func handleTimer(timer: NSTimer) {
guard let index = timer.userInfo as? Int else { return }
playEvent(index)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
665 次 |
| 最近记录: |