概要
OperationにはConcurrentとNon-Concurrentの2タイプがありますが、本記事ではNon-Concurrentの使用例を簡単に紹介します。Concurrentの処理については別記事を参考にしてください。
背景
iOSアプリの開発において、メインスレッドでのUIの操作と並行して、バックグラウンドで何らかの処理を実行したい時があります。たとえばサーバから何らかのデータをダウンロードする処理であったり、あるいは端末側に溜め込んだデータをサーバ側に送信する場合などです。そのような場合、Operationクラスを用いて非同期に処理を行うことが可能です。
Operationクラスの実装
まずはOperationを継承したクラスを作成し、mainメソッドをoverrideします。下記の例では、dataを用いて何らかの処理を行うSomeOperationクラスを実装しています。
dataを用いて何らかの処理を行うSomeOperationクラス
class SomeOperation: Operation {
var data: Any
init(data: Any) {
self.data = data
}
override func main() {
doSomething(data: self.data)
}
}
OperationQueueにOperationを追加
次に、下記のようにOperationQueueにOperationを追加していきます。これだけでSomeOperationクラスのmainメソッドの処理が順次走ることになります。
let operationQueue = OperationQueue.main
for data in dataList {
operationQueue.addOperation(SomeOperation(data: data))
}