Свойство NSOperation переопределяет (isExecuting / isFinished)

Я подклассNSOperation в Swift и нужно переопределитьisExecuting а такжеisFinished свойства, так как я отменяюstart метод.

Проблема, с которой я сталкиваюсь, заключается в том, как сохранить наблюдение значения ключа (KVO), в то же время имея возможность переопределять эти свойства.

Обычно в Obj-C было бы довольно просто переопределить свойства какreadwrite в расширении классаJSONOperation () определение. Однако я не вижу такой же возможности в Swift.

Пример:

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

Вот решение, которое я придумала, но оно кажется ужасно уродливым и хакерским:

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

Пожалуйста, скажите мне, что есть лучший способ. Я знаю, что мог бы сделатьvar isExecuting вместо всегоstruct, но тогда у меня есть два свойства с одинаковыми именами, которые вносят двусмысленность, а также делают их общедоступными для записи (что я не хочу).

О, что бы я сделал для некоторых ключевых слов модификатора доступа ...

Ответы на вопрос(3)

Ваш ответ на вопрос