gpt4 book ai didi

generics - 通用 NSOperation 子类失去了 NSOperation 功能

转载 作者:IT王子 更新时间:2023-10-29 05:40:29 25 4
gpt4 key购买 nike

今天,我在尝试“概括”我的“CoreData 导入操作”时遇到了一个奇怪的问题。看来如果我创建 NSOperation 的通用子类 main() func 不会被调用。

简单的例子:

class MyOperation<T: NSObject>: NSOperation {

override func main() {
println("My operation main was called")
}
}

如果您创建此类的实例并将其添加到 operationQueue你会看到它是main()实际上并没有被调用。

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

操作简单地从ready转移至 executingfinished不打电话的状态main() .

如果我删除通用注释 <T: NSObject>来自 MyOperation类它将正常工作。

这怎么可能?我在这里遗漏了什么吗?

最佳答案

解决方法:您可以创建 NSOperation 子类(非泛型),覆盖 main 并调用您自己的“执行”函数,它可以被泛型子类覆盖。示例:

class SwiftOperation : NSOperation {

final override func main() {
execute()
}

func execute() {
}

}

class MyOperation<T> : SwiftOperation {

override func execute() {
println("My operation main was called")
}

}

关于generics - 通用 NSOperation 子类失去了 NSOperation 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26097581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com