2017-06-15 86 views
0

我想子類NSOperationQueue跟蹤互聯網依賴的操作是否成功完成或沒有。是否可以繼承NSOperationQueue?我們可以繼承NSOperationQueue嗎?

+1

是的,你可以做到這一點 –

+3

可以,但你不必。相反,您可以創建一個觀察添加到隊列中的所有操作的類。組成通常比繼承更受歡迎。 – Avi

+0

也許我們可以幫助你更多,如果你解釋爲什麼你想要子類'NSOperationQueue',我們可以幫助你解決這個更廣泛的問題。但是,雖然子類化NSOperation並不少見,但將子類NSOperationQueue繼承是非常罕見的。 (而且,蘋果自己演示的NSOperationQueue的子類化是一個熱門的混亂,恕我直言。)因此,在我跳入子類化「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方法,調用super.start()當覆蓋start方法。 2.當操作完成或取消設置self.state = .finished'

欲瞭解更多詳情,請參閱本link

+1

這不是繼承'NSOperationQueue'。這是「NSOperation」的子類。他問的是Objective-C,而不是Swift。 – Rob

+1

另外,僅供參考,Apple建議同步您的「操作」屬性更改。以上是不是線程安全的。 – Rob

+0

@Rob感謝您的反饋 –