Ü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?