我很困惑!当我初始化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中可用,你可以在这里看到:
此外,没有类方法scheduledTimer()
可用,即使我记得它曾经是他们在Swift 2.2中。 timer
对象没有任何类方法可用,这意味着上面提到的唯一可用类型方法是我唯一的选项。
答案 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版本
答案 3 :(得分:0)
您只需要使用完全相同的方法,而无需使用block
和其他参数(target
,selector
和userInfo
)。
我刚刚做到了:
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....
}