泛型 – 通用NSOperation子类失去了NSOperation功能

今天,当我试图“概括”我的’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类它将工作正常.

这怎么可能?
在这里错过了什么吗?

问题是由这个简单的规则引起的:

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

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...