関数を毎秒起動するためにタイマーをスケジュールする必要がありますが、xcode 8ベータ3では、scheduledTimerはiOS 10でのみ使用可能です。iOS9または以前のバージョンでタイマーを使用する代替手段はありますか?
Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { (timer) in print("Hi!")})
を使用して解決
Timer.scheduledTimer(timeInterval: 1,
target: self,
selector: #selector(self.updateTime),
userInfo: nil,
repeats: true)
Swift3でタイマーを実行し、
var timer: Timer?
func startTimer() {
if timer == nil {
timer = Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(self.loop), userInfo: nil, repeats: true)
}
}
func stopTimer() {
if timer != nil {
timer?.invalidate()
timer = nil
}
}
func loop() {
let liveInfoUrl = URL(string: "http://192.168.1.66/api/cloud/app/liveInfo/7777")
let task = URLSession.shared.dataTask(with: liveInfoUrl! as URL) {data, response, error in
guard let data = data, error == nil else { return }
print(String(data: data, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) ?? "aaaa")
}
task.resume()
}
使用しないときはタイマーを放します。
実行ループでスケジュールされると、タイマーは無効になるまで指定された間隔で起動します。非繰り返しタイマーは、起動直後に無効になります。ただし、繰り返しタイマーの場合は、invalidate()メソッドを呼び出してタイマーオブジェクトを自分で無効にする必要があります。
互換性のある実行可能なサンプルコードを次に示します。
if #available(iOS 10.0, *) {
Timer.scheduledTimer(withTimeInterval: 15.0, repeats: true){_ in
// Your code is here:
self.myMethod()
}
}
else {
Timer.scheduledTimer(timeInterval: 15.0, target: self, selector: #selector(self.myMethod), userInfo: nil, repeats: true)
}
//メソッドまたは関数:
// MARK: - Method
@objc func myMethod() {
print("Hi, How are you.")
}
Swift 3向けに更新:
プロジェクトのコード行の下で使用される遅延またはその他の目的でタイマーを使用する場合;
//関数の定義:
func usedTimerForDelay() {
Timer.scheduledTimer(timeInterval: 0.3,
target: self,
selector: #selector(self.run(_:)),
userInfo: nil,
repeats: false)
}
func run(_ timer: AnyObject) {
print("Do your remaining stuff here...")
}
//関数呼び出し:
self.usedTimerForDelay()
注:-必要に応じて時間間隔を変更できます。
//コーディングをお楽しみください。
Swift
func runCode(in timeInterval:TimeInterval, _ code:@escaping ()->(Void))
{
DispatchQueue.main.asyncAfter(
deadline: .now() + timeInterval,
execute: code)
}
func runCode(at date:Date, _ code:@escaping ()->(Void))
{
let timeInterval = date.timeIntervalSinceNow
runCode(in: timeInterval, code)
}
func test()
{
runCode(at: Date(timeIntervalSinceNow:2))
{
print("Hello")
}
runCode(in: 3.0)
{
print("World)")
}
}
Timer.scheduledTimer
メインスレッドに配置します。