在 Swift Playground 中使用 NSTimer [重复]

Posted

技术标签:

【中文标题】在 Swift Playground 中使用 NSTimer [重复]【英文标题】:Using NSTimer in swift playground [duplicate] 【发布时间】:2015-03-24 12:10:52 【问题描述】:

我想知道如何在 Swift Playground 中使用 NSTimer。 This question has been asked before,但没有一个答案真正回答了这个问题。

这是我的游乐场代码:

import Foundation

class MyClass 

    func startTimer() 
        NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "onTimer:", userInfo: nil, repeats: true)
    

    func onTimer(timer:NSTimer!) 
        println("Timer here")
    


var anInstance = MyClass()

anInstance.startTimer()

scheduledTimerWithTimeInterval 实例化NSTimer 会创建计时器在当前运行循环中安排它。

但是方法onTimer 永远不会被调用。为什么?

【问题讨论】:

【参考方案1】:

首先,您的onTimer 方法必须声明为@objc,否则NSTimer 找不到。

至于你的问题,是因为你还没有启动运行循环。

为此,CFRunLoopRun() 是我认为最简单的解决方案。

import Foundation

class MyClass 

    func startTimer() 
        NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "onTimer:", userInfo: nil, repeats: true)
    

    @objc func onTimer(timer:NSTimer!) 
        println("Timer here")
    


var anInstance = MyClass()

anInstance.startTimer()

CFRunLoopRun() // <-- HERE!

为了完整起见,正如评论中提到的@MartinR,您也可以使用XCPSetExecutionShouldContinueIndefinitely()

import Foundation
import XCPlayground
XCPSetExecutionShouldContinueIndefinitely()

class MyClass 

    func startTimer() 
        NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "onTimer:", userInfo: nil, repeats: true)
    

    @objc func onTimer(timer:NSTimer!) 
        println("Timer here")
    


var anInstance = MyClass()

anInstance.startTimer()

在这种情况下,Playground 只运行时间轴中指定的秒数:

【讨论】:

... 或 XCPSetExecutionShouldContinueIndefinitely() @MartinR 和 import XCPlayground :) 这非常简单,CFRunLoopRun() 行。考虑到NSTimer 的实现方式,这是有道理的。

以上是关于在 Swift Playground 中使用 NSTimer [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Playground 中使用 Swift 包管理器

如何使用 Swift 在 Playground 中获取用户交互事件

在 Swift/Playground 中使用 .append 选项到数组结束时出现错误

如何在 Playground 中导入 Swift 包?

如何在 Swift Playground 中使用更新功能

在 Swift 4 Playground 中使用外部库