Substituições da propriedade NSOperation (isExecuting / isFinished)

Eu estou subclassificandoNSOperation no Swift e precisa substituir oisExecuting eisFinished propriedades desde que eu estou substituindo ostart método.

O problema que encontro é como preservar a observação do valor-chave (KVO), além de poder substituir essas propriedades.

Normalmente, no Obj-C, seria muito fácil redefinir as propriedades comoreadwrite na extensão de classeJSONOperation () definição. No entanto, não vejo esse mesmo recurso no Swift.

Exemplo:

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)
        })
    }
}

Então, aqui está a solução que eu encontrei, mas ela é terrivelmente feia e hacky:

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 }
}

Por favor, diga-me que existe uma maneira melhor. Eu sei que eu poderia fazer umavar isExecuting em vez do todostruct, mas tenho duas propriedades com nomes semelhantes que introduzem ambiguidade e também a tornam publicamente gravável (o que eu não quero).

Ah, o que eu faria por algumas palavras-chave do modificador de acesso ...

questionAnswers(2)

yourAnswerToTheQuestion