今天,当我试图“概括”我的’CoreData导入操作’时,我遇到了一个奇怪的问题.
似乎如果我创建NSOperation的通用子类,则不会调用main()函数.
似乎如果我创建NSOperation的通用子类,则不会调用main()函数.
简单的例子:
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) }
操作只是从准备好转换到执行状态,而不是调用main().
如果我删除通用注释< T:NSObject>从MyOperation类它将工作正常.
这怎么可能?
我在这里错过了什么吗?
问题是由这个简单的规则引起的:
原文链接:https://www.f2er.com/swift/318809.htmlMethod in a generic class cannot be represented in Objective-C
因此,当桥接到Objective-C时,MyOperation看起来像纯粹的,没有方法被覆盖,NSOperation子类.
您可以通过使用@objc属性标记override func main()来查看此错误.
@objc override func main() { // < [!] Method in a generic class cannot be represented in Objective-C println("My operation main was called") }