泛型 – 通用NSOperation子类失去了NSOperation功能
发布时间:2020-12-14 05:19:24 所属栏目:百科 来源:网络整理
导读:今天,当我试图“概括”我的’CoreData导入操作’时,我遇到了一个奇怪的问题. 似乎如果我创建NSOperation的通用子类,则不会调用main()函数. 简单的例子: class MyOperationT: NSObject: NSOperation { override func main() { println("My operation main wa
今天,当我试图“概括”我的’CoreData导入操作’时,我遇到了一个奇怪的问题.
似乎如果我创建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类它将工作正常. 这怎么可能?
问题是由这个简单的规则引起的:
因此,当桥接到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") } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |