Свойство 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
, но тогда у меня есть два свойства с одинаковыми именами, которые вносят двусмысленность, а также делают их общедоступными для записи (что я не хочу).
О, что бы я сделал для некоторых ключевых слов модификатора доступа ...