在swift中将泛型类设置为委托
我有一个类在swift中将泛型类设置为委托,swift,generics,delegates,Swift,Generics,Delegates,我有一个类XMLUtil,它封装了一些xml解析功能。该类有一个泛型参数T。该类还充当nsxmlparserelegate到NSXMLParser的委托者 class XMLUtil<T>: NSObject, NSXMLParserDelegate{ ... ... init(){ parser = NSXMLParser(data: NSData) parser.delegate = self parser
XMLUtil
,它封装了一些xml解析功能。该类有一个泛型参数T
。该类还充当nsxmlparserelegate
到NSXMLParser
的委托者
class XMLUtil<T>: NSObject, NSXMLParserDelegate{
...
...
init(){
parser = NSXMLParser(data: NSData)
parser.delegate = self
parser.parse()
}
...
...
//delegate method implementations
}
类XMLUtil:NSObject,NSXMLParserDelegate{
...
...
init(){
parser=NSXMLParser(数据:NSData)
parser.delegate=self
parser.parse()
}
...
...
//委托方法实现
}
问题:
当我的XMLUtil类是泛型类时,永远不会调用委托方法。但是,当我在没有泛型参数的情况下实现XMLUtil
类时,它们会这样做
这两个问题似乎性质相似
文件中有什么可以解释这种行为吗?这是故意的还是一个bug
当我的XMLUtil类是泛型类时
但是Objective-C对泛型类一无所知。因此,无法向Objective-C显示XMLUtil类。因此,它不能充当NSXMLParser的委托;NSXMLParser是一个Objective-C类,如果它是泛型的,则无法看到XMLUtil类
一种简单的方法是尝试将XMLUtil类标记为
@objc
。你会失败;编译器会阻止你。无法向Objective-C展示该课程。是的,您引用的链接告诉您答案。泛型类不能是Cocoa类的委托。这不是虫子。。。这是一个尚未实现的功能。我不知道它是否会被实施。这可能是不可能的。但这是目前的局限性。很有趣。那么,编译器的行为是否就好像parser.delegate=self行不存在一样?还有,为什么它不阻止我将泛型类作为委托分配给Objective-C类?“另外,为什么它不阻止我将泛型类作为委托分配给Objective-C类?”这是一个非常好的问题。你可能认为编译器会以某种方式提前阻止你。我个人认为这是一个错误;编译器应该更有帮助。让你做一些实际上不起作用的事情不是很好。我认为声明单个委托方法@objc
没有帮助?您不能说,例如,@objc func parserDidStartDocument
等,然后调用它们?我不希望它能工作,但值得一试。嗨,Matt,快速提问,如果我不能实例化一个对象,因为它是一个泛型类,我在另一个类中没有访问权限,但我希望泛型类调用另一个类中的函数,那么我如何设置delegate=self,因此需要delegate?