我有一个类 XMLUtil
,它包装了一些 xml 解析功能。该类有一个通用参数T
。该类还充当 NSXMLParser
委托(delegate)器的 NSXMLParserDelegate
。
class XMLUtil<T>: NSObject, NSXMLParserDelegate{
...
...
init(){
parser = NSXMLParser(data: NSData)
parser.delegate = self
parser.parse()
}
...
...
//delegate method implementations
}
问题:
当我的 XMLUtil 类是泛型类时,委托(delegate)方法永远不会被调用。然而,当我实现没有泛型参数的 XMLUtil
类时,它们会这样做
这两个问题性质相似
Swift Generic class as delegate
NSURLConnection Delegate Methods Not Called In Generic Class
文档中是否有任何内容可以解释此行为?这是有意为之还是一个错误?
最佳答案
When my XMLUtil class is a generic class
但是 Objective-C 对泛型类一无所知。因此无法向 Objective-C 显示您的 XMLUtil 类。因此,它不能充当 NSXMLParser 的委托(delegate); NSXMLParser 是一个 Objective-C 类,如果它是通用的,则无法看到您的 XMLUtil 类。
查看此情况的一种简单方法是尝试将 XMLUtil 类标记为 @objc
。你会失败;编译器会阻止你。无法向 Objective-C 展示此类。
关于swift - 在 swift 中设置一个泛型类作为委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31999674/