swift - 在 swift 中设置一个泛型类作为委托(delegate)

标签 swift generics delegates

我有一个类 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/

相关文章:

java - 从通用模式面板(JSF、SEAM)调用并将参数传递给 Action 类的方法

ios - 在 Swift 中遵守自制协议(protocol)时出错

swift - 如何在 Swift 中实现泛型转换初始化器?

ios - 如何增加Xcode中导航栏的高度?

swift - SRWebClient 图片上传无法转换值

C# 将类作为字符串传递并从数组中转换它

swift - Xcode Playground 错误? "fatal error: Can' t 从空字符串形成一个字符”

c# 3.0 转换接口(interface)泛型类型

c# - 如何向 webform 项目添加回调

delegates - HearthRateMonitor/BT101 Swift 示例 : discoverServices's delegate methods not called