【问题标题】:How do I add a timer using Swift?如何使用 Swift 添加计时器?
【发布时间】:2017-05-31 02:22:14
【问题描述】:

我遇到过很多类似的问题,但很多都是针对旧版本的 Xcode,或者根本不起作用。 我正在使用 Xcode 版本 8.3.2 (8E2002) 和 Swift 编码语言。我对编码知之甚少,但我年轻且渴望学习! 我正在创建一个clicker game,它可以让您在游戏本身中每秒获得金钱。所以如果你闲置 2 分钟,它会给你 120 美元(120 秒每秒 1 美元)。除此之外,您还可以通过单击主要对象来赚钱。 到目前为止,这是我的编码:

import UIKit

class ViewController: UIViewController {

var score = 0
var add = 1

func addpersec() {

    score += 1
}
//func used to add to the score based timer. Aka, adding 1 per second



@IBOutlet weak var scorecount: UILabel!


@IBAction func clicks(_ sender: Any) {
    score += 1
    scorecount.text = "Honey: \(score)"
}

@IBOutlet weak var Bees: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


}

【问题讨论】:

  • 我不知道投票的目的是什么,似乎是一个合法的问题

标签: swift xcode


【解决方案1】:
class ViewController: UIViewController {
    var timer: Timer? = nil // Property

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(handleTimer), userInfo: nil, repeats: true)
    }

    func handleTimer(_ timer: Timer) {
        print("Timer ticking!")
    }
}

要使计时器失效,请致电self.timer?.invalidate()

【讨论】:

  • Xcode 声明“NSTimer”已重命名为“Timer”
  • @Traxido 然后使用Timer。它曾经是NSTimer,但通过删除来自Objective-C 的前缀(如NS)来重命名许多类。
  • 谢谢,我是 Xcode 的新手,而且我是 swift 新手,所以我并不完全理解所有内容,但出现了另一个错误,指出“使用未解析的标识符 'YourViewControllerSubclass'”
  • @Traxido 可以理解。 YourViewControllerSubclass 是您现在正在编辑的 UIViewController 的子类(即它您的视图控制器)。在您的情况下,您的子类是ViewController。将所有YourViewControllerSubclass 替换为ViewController 就可以了。
  • 我希望的最后一件事,再次抱歉,但这一次它表明视图控制器没有成员 'handleTimer'
【解决方案2】:

您的问题似乎与iOS UI有关,所以不知道我的回答是否有意义。

对于通用延迟函数执行(如 Javascript 的 setTimeout),您可以使用 DispatchQueue

// have this as a global somewhere
let bg = DispatchQueue(label: "bg", qos: .background, target: nil)

// anywhere else in your code:

// First decide the time to execute your function
let delayInSeconds = 3
let when = DispatchTime.now() + delayInSeconds

// call it
bg.asyncAfter(deadline: when) {
    // code to execute later (this is the body of an anonymous function)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多