早期版本的iOS 10的计时器? (Xcode 8,Swift 3)

时间:2016-10-26 16:54:30

标签: ios swift timer

我很困惑!当我初始化NSTimer() Xcode告诉我它已被重命名为Timer()并且如果我初始化Timer() Xcode告诉我它仅适用于iOS 10.0或更高版本。如果我想在早期版本的iOS上使用计时器,我应该使用什么?!对我来说最奇怪的是,似乎没有其他人遇到这个问题,所以我在这里错过了什么?我做错了什么?

更新 好吧,即使我已经多次投票,因为人们误解了我的问题(像往常一样),我仍然会试着澄清我的情况。是的,我理解NSTimer()在Swift 3中被重命名为Timer(),这就是我在第一句话中引用Xcode警告信息的字面意思,所以我不知道为什么每个人都有'纠正'我的冲动在那。其次,事实证明只剩下一种类型的方法,我可以用于iOS 10之前的设备,Timer(timeInterval: <#T##TimeInterval#>, target: <#T##Any#>, selector: <#T##Selector#>, userInfo: <#T##Any?#>, repeats: <#T##Bool#>)。其他4种类型的方法都会弹出一个警告,它只在iOS 10中可用,你可以在这里看到: Screenshot of Xcode warning

此外,没有类方法scheduledTimer()可用,即使我记得它曾经是他们在Swift 2.2中。 timer对象没有任何类方法可用,这意味着上面提到的唯一可用类型方法是我唯一的选项。

4 个答案:

答案 0 :(得分:3)

计时器 NSTimer。这在iOS 10中并不新鲜。

  

如果我初始化Timer()

你应该从不通过说Timer()来初始化Timer。您必须调用类方法scheduledTimer(timeInterval:target:selector:userInfo:repeats:)

iOS 10中 的新内容是类方法scheduledTimer(withTimeInterval:repeats:block:)。您无法在iOS 9及之前调用它。但你不必这样做。只需在iOS 9和iOS 10中调用scheduledTimer(timeInterval:target:selector:userInfo:repeats:),一切都会好的。

答案 1 :(得分:1)

我认为你有点不对劲,Timer()是Swift 3.0的新语法,不适用于任何iOS版本。 Swift 3.0适用于iOS 8,9,10。虽然NSTimer用于Swift 2.2及更低版本。因此,请确保您的部署目标为8,9或10,并且没问题。

答案 2 :(得分:0)

这是针对swift3的NSTimer()的新别名。耀可以将它用于所有ios版本

阅读这篇好文章https://www.hackingwithswift.com/swift3

答案 3 :(得分:0)

您只需要使用完全相同的方法,而无需使用block和其他参数(targetselectoruserInfo)。

我刚刚做到了:

override func viewDidLoad() {
    super.viewDidLoad()
    //your stuff....
    Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(doSomeStuff), userInfo: nil, repeats: false)
}

@objc func doSomeStuff() {
    //your stuff....
}

以下是等效的快速版本:

// Swift >=3 selector syntax
let timer = Timer.scheduledTimer(timeInterval: 0.4, target: self, selector: #selector(self.update), userInfo: nil, repeats: true)
// Swift 2.2 selector syntax
let timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: #selector(MyClass.update), userInfo: nil, repeats: true)
// Swift <2.2 selector syntax
let timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: "update", userInfo: nil, repeats: true)

您必须对selector使用@objc的函数:

@objc func doSomeStuff() {
    //your stuff....
}