         }
     }
     
-    override var ready: Bool {
+    override public var ready: Bool {
         return super.ready && state == .Ready
     }
     
-    override var executing: Bool {
+    override public var executing: Bool {
         return state == .Executing
     }
     
-    override var finished: Bool {
+    override public var finished: Bool {
         return state == .Finished
     }
     
-    override var asynchronous: Bool {
+    override public var asynchronous: Bool {
         return true
     }
     
-    internal override func start() {
+    public override func start() {
         if cancelled {
             state = .Finished
             return


import Foundation

class AbstractOperation: NSOperation {
    enum State: String {
        case Ready, Executing, Finished
        
        private var keyPath: String {

        }
    }
    
    public var state = State.Ready {
        willSet {
            willChangeValueForKey(newValue.keyPath)
            willChangeValueForKey(state.keyPath)
