Überschreibungen der NSOperation-Eigenschaft (isExecuting / isFinished)

Ich bin UnterklassenNSOperation in Swift und müssen die überschreibenisExecuting undisFinished Eigenschaften, da ich die überschreibestart Methode.

Das Problem, auf das ich stoße, besteht darin, die Schlüsselwertüberwachung (KVO) beizubehalten und diese Eigenschaften zu überschreiben.

Normalerweise ist es in Obj-C ziemlich einfach, die Eigenschaften als neu zu deklarierenreadwrite in der KlassenerweiterungJSONOperation () Definition. Ich sehe jedoch nicht die gleiche Fähigkeit in Swift.

Beispiel:

class JSONOperation : NSOperation, NSURLConnectionDelegate
{
    var executing : Bool
    {
        get { return super.executing }
        set { super.executing } // ERROR: readonly in the superclass
    }

    // Starts the asynchronous NSURLConnection on the main thread
    override func start()
    {
        self.willChangeValueForKey("isExecuting")
        self.executing = true
        self.didChangeValueForKey("isExecuting")

        NSOperationQueue.mainQueue().addOperationWithBlock(
        {
            self.connection = NSURLConnection(request: self.request, delegate: self, startImmediately: true)
        })
    }
}

Also hier ist die Lösung, die ich gefunden habe, aber sie fühlt sich furchtbar hässlich und abgedreht an:

var state = Operation()

struct Operation
{
    var executing = false
    var finished = false
}

override var executing : Bool
{
    get { return state.executing }
    set { state.executing = newValue }
}

override var finished : Bool
{
    get { return state.finished }
    set { state.finished = newValue }
}

Bitte sag mir, dass es einen besseren Weg gibt. Ich weiß, ich könnte eine machenvar isExecuting statt des ganzenstruct, aber dann habe ich zwei ähnlich benannte Eigenschaften, die Mehrdeutigkeit einführen und es auch öffentlich beschreibbar machen (was ich nicht will).

Oh, was würde ich für einige Schlüsselwörter für Zugriffsmodifikatoren tun?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage