在swift中将泛型类设置为委托

时间:2015-08-13 22:49:28

标签: swift generics delegates

我有一个类XMLUtil,它包含了一些xml解析功能。该类有一个通用参数T。该类还充当NSXMLParserDelegate委托人的NSXMLParser

class XMLUtil<T>: NSObject, NSXMLParserDelegate{
    ...
    ...

    init(){
        parser = NSXMLParser(data: NSData)
        parser.delegate = self
        parser.parse()
    }

    ...
    ...
    //delegate method implementations

}

问题:

当我的XMLUtil类是泛型类时,委托方法永远不会被调用。但是,当我实现没有通用参数的XMLUtil

时,它们会这样做

这两个问题似乎具有相似的性质

Swift Generic class as delegate

NSURLConnection Delegate Methods Not Called In Generic Class

文档中是否有任何可以解释此行为的内容?这是故意还是错误?

1 个答案:

答案 0 :(得分:3)

  

当我的XMLUtil类是泛型类

但Objective-C对泛型类一无所知。因此无法将您的XMLUtil类显示给Objective-C。因此,它不能作为NSXMLParser的委托; NSXMLParser是一个Objective-C类,如果它是通用的,则无法看到您的XMLUtil类。

一种简单的方法是尝试将XMLUtil类标记为@objc。你会失败;编译器会阻止你。没有办法将此类显示给Objective-C。