前提・実現したいこと
PDFを見ている時に、Timer関数で別の処理を行おうとしています.
全てをメインスレッドを行うと、TimerのIntervalが設定した通りにならず、ズレてしまいます.
そこで、TimerのIntervalを出来るだけ正確にするために、Timer関数は別のスレッドで処理するようにしたいと考えています.
調べたところ、Swiftで並列処理を行う時は、GCD または OperationQueue を使うようだと分かりました.
しかし今回の場合、どちらを使う方が適しているのか、よく分かりませんでした.
取り敢えず、こちらのサイトを参考に、OperationQueueを使ってみようとしましたが、エラーが発生してしまいます.
そもそも、参考サイトと同じようなやり方で実現できるのか疑問なのですが、並列処理を使ったプログラムを書くのが初めてで、何をどう変えるべきなのか、調べてもよく分かりません.
どのようにすれば、Timer関数を別のスレッドで処理できるのでしょうか?
ご回答よろしくお願いします.
発生している問題・エラーメッセージ
Initializers may only be declared within a type
該当のソースコード
//OperationQueue class PendingOperations { lazy var timeQueue: OperationQueue = { var queue = OperationQueue() queue.name = "Timer Queue" queue.maxConcurrentOperationCount = 1 return queue }() } //タイマー class TimerCount: Operation { override func main(){ //キャンセルされているか if isCancelled { return } var timer = Timer() init(){ //タイマー開始 self.timer = Timer.scheduledTimer(timeInterval:0.02, target:self, selector: #selector(ComicViewController.update), userInfo: nil, repeats: true) } } }
試したこと
override func main() をコメントアウトしてみましたが、別のエラーメッセージ(Overriding declaration requires an 'override' keyword)が発生します.
補足情報(FW/ツールのバージョンなど)
バージョン
Xcode 10.3 → Xcode 11.1(10/17), Swift 5.0.1
回答2件
あなたの回答
tips
プレビュー