2016-10-14 69 views
5

çalışmaz:Zamanlayıcı Bu kodu vardır Swift 3.0 ile oyun alanında çalışma Swift 3.0 oyun alanı

struct Test { 
    func run() { 
     var timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: false) { timer in 
      print("pop") 
     } 
    } 
} 

let test = Test() 
test.run() 

Ama hiçbir şey teselli etmeye yazdırıyor. Ben How can I use NSTimer in Swift? okudum ve bu çalıştı yüzden çevrimiçi cevapları ve öğreticiler gördüğüm zamanlayıcı kullanımının çoğu seçici içerir:

class Test { 
    func run() { 
     var timer = Timer.scheduledTimer(timeInterval: 0.4, target: self, selector: #selector(self.peep), userInfo: nil, repeats: false) 
    } 

    @objc func peep() { 
     print("peep") 
    } 
} 

let test = Test() 
test.run() 

Hala hiçbir şey konsola yazdırmak gibi görünüyor. timer.fire() eklerseniz, konsol yazdırılır, ancak açıkçası bu amacı yener. Zamanlayıcının çalışmasını sağlamak için neye ihtiyacım var?

DÜZENLEME: hile yaptı benim Test yapı için run yöntemi denilen sonra

Yani CFRunLoopRun() ekledi. Çok teşekkür ederim, özellikle de @AkshayYaduvanshi (kimin yorumunu bana CFRunLoopRun() işaret etti) ve @JoshCaswell (cevabı kimin zamanlayıcı sadece run run ile çalıştığı gerçeği getirdi).

+0

"Oyun alanında çalışıyor" Ve sorun bu. – matt

+0

Bunu kontrol edin [link] (http://stackoverflow.com/questions/29232334/using-nstimer-in-swift-playground) –

cevap

5

Bir çalışma döngüsü başlatmanız gerekiyor. giriş kabul edilebilir bir çalışma çalıştırmak döngü olmadıkça

RunLoop.main.run(until: Date(timeIntervalSinceNow: 3)) 

zamanlayıcı şey yapmaz. Program sadece sona erer.

Timer reference

: çalışma döngüleri ile bağlantılı olarak

zamanlayıcılar çalışır. [...] sadece zamanlayıcının eklendiği çalışma döngüsü modlarından biri çalışıyorsa ve zamanlayıcının ateşleme zamanının geçip geçmediğini kontrol edebildiğinde tetiklenir. Eğer Bahçesi PlaygroundSupport aracılığıyla süresiz çalışmasına izin eğer

+0

Hızlı yanıt için teşekkürler. Referansta bunu özledim, emin olabilmek için bazı okuma ve testler yapmak zorundayım, ama bu problem gibi görünüyor çünkü ben hiç bir şey kullanmıyorum. –

13

İlk versiyonu çalışır:

import Foundation 
import PlaygroundSupport 

PlaygroundPage.current.needsIndefiniteExecution = true 

let timer = Timer.scheduledTimer(withTimeInterval: 3, repeats: true) { timer in 
    print("Timer Fired at: \(timer.fireDate)") 
} 

bir çalışma döngüsü elle de çalışır ekleme ve bazen gerekli olabilir, fakat sizin durumunuzda bu basit talimatıdır Zamanlayıcının düzgün çalışması için yeterlidir.