Dzisiaj spotkałem jeden dziwny problem, kiedy próbowałem "uogólnić" moje "operacje importowania danych CoreData". Okazało się, że jeśli utworzę ogólną podklasę operacji NSOperation, funkcja 01cnie zostanie wywołana.Ogólna podklasa NSOperation traci funkcjonalność NSOperation
Prosty przykład:
class MyOperation<T: NSObject>: NSOperation {
override func main() {
println("My operation main was called")
}
}
Jeśli utworzyć wystąpienie tej klasy i dodać go do operationQueue
widać, że to nie jest faktycznie main()
nazywa.
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.operationQueue = NSOperationQueue()
let operation = MyOperation<NSString>()
self.operationQueue!.addOperation(operation)
}
Operacja prostu tranzytem z ready
do executing
i finished
stanie bez wywoływania main()
.
Po usunięciu ogólnej adnotacji <T: NSObject>
z klasy MyOperation
będzie działać poprawnie.
Jak to jest możliwe? Czy tu czegoś brakuje?
Dziękuję za wyjaśnienia. To smutne, że nie możemy używać tak potężnej techniki w Swift z Objective-C. W tym szczególnym przypadku "uogólnione" operacje mogą pomóc w ponownym wykorzystaniu kilku partii kodu. Cóż, tak. :/ – Nevs12