2017-06-15 9 views
0

NSOperationQueueをサブクラス化して、インターネット依存の操作が正常に終了したかどうかを確認したいと思います。 NSOperationQueueをサブクラス化することは可能ですか?NSOperationQueueをサブクラス化できますか?

+1

を参照してください。はい、あなたはそれをすることができます –

+3

を行うことができますが、あなたがする必要はありません。代わりに、キューに追加されたすべての操作を監視するクラスを作成できます。通常、継承には合成が優先されます。 – Avi

+0

なぜNSOperationQueueをサブクラス化したいのかを説明したらもっと助けてくれるかもしれません。私たちはおそらくあなたがそのより広い問題に取り組むのを助けることができます。しかし、 'NSOperation'のサブクラス化は珍しいことではありませんが、' NSOperationQueue'のサブクラス化は非常にまれです。 (そして、NSOperationQueueをサブクラス化するアップル独自のデモンストレーションはちょっとしたことですが、IMHOです。)したがって、NSOperationQueueをサブクラス化する前に、より広い目的を綿密に見ていきたいと思います。 – Rob

答えて

0

非常によくNSOperationQueueをサブクラス化できます。

は以下の使用方法OperationQueue

import Foundation 
    class AsynchronousOperation: Operation { 
     override var isAsynchronous: Bool { return true } 
     override var isExecuting: Bool { return state == .executing } 
     override var isFinished: Bool { return state == .finished } 

     var state = State.ready { 
      willSet { 
       willChangeValue(forKey: state.keyPath) 
       willChangeValue(forKey: newValue.keyPath) 
      } 
      didSet { 
       didChangeValue(forKey: state.keyPath) 
       didChangeValue(forKey: oldValue.keyPath) 
      } 
     } 

     enum State: String { 
      case ready = "Ready" 
      case executing = "Executing" 
      case finished = "Finished" 
      fileprivate var keyPath: String { return "is" + self.rawValue } 
     } 

     override func start() { 
      if self.isCancelled { 
       state = .finished 
      } else { 
       state = .ready 
       main() 
      } 
     } 

     override func main() { 
      if self.isCancelled { 
       state = .finished 
      } else { 
       state = .executing 
      } 
     } 
    } 

クラス分けサブの例である: 1.コールsuper.main()オーバーライドmain方法、ときオーバーライドstart方法super.start()を呼び出します。 2.操作が完了またはキャンセルされた詳細についてはself.state = .finished'

を設定し、このlink

+1

これは 'NSOperationQueue'をサブクラス化していません。それは 'NSOperation'をサブクラス化しています。そして、彼はSwiftではなくObjective-Cについて尋ねていました。 – Rob

+1

また、FYI、Appleはあなたの 'Operation'プロパティの変更を同期することを提案しています。上記はスレッドセーフではありません。 – Rob

+0

あなたのフィードバックのために@Robに感謝 –

関連する問題