Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在swift中将泛型类设置为委托_Swift_Generics_Delegates - Fatal编程技术网

在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?