gpt4 book ai didi

xml - Swift:拥有多个 NSXMLParser 委托(delegate)的最佳方式是什么?

转载 作者:行者123 更新时间:2023-11-30 10:05:09 28 4
gpt4 key购买 nike

我正在开发一个项目,该项目使用带有 XML 输出的基于 REST 的 API。我们有多个对查询具有标准格式 XML 响应的对象。为了回答这个问题,我们假设我们有用户和设备。用户响应的格式始终相同,但与设备响应不同。我想为每种查询类型编写自定义 didStartElementdidEndElement 函数。实现这一目标的最佳方法是什么?我已经尝试创建一个新类作为 NSXMLParserDelegate,但是当我尝试将其作为解析器的委托(delegate)时,出现错误。我可能做错了。感谢您的帮助。

下面的代码是在实际的ViewController页面中

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]){
//Do this for user response
}

func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?){
//Do this for user response
}

func parser(parser: NSXMLParser, foundCharacters string: String){
//Do this for user response
}

func parserDidEndDocument(parser: NSXMLParser){
//Do this for user response
}

我添加了一个新的类(class)页面,如下所示:

import UIKit

class Device_Parser: NSObject, NSXMLParserDelegate {

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]){
//Do this for device response
}

func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?){
//Do this for device response
}

func parser(parser: NSXMLParser, foundCharacters string: String){
//Do this for device response
}

func parserDidEndDocument(parser: NSXMLParser){
//Do this for device response
}


}

在 ViewController 页面中,我尝试像这样调用新的解析器类:

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let parser = NSXMLParser(data: data!)
parser.delegate = Device_Parser
parser.parse()


}

在 parser.delegate = Device_Parser 上,我收到以下错误:

Cannot assign value of type 'Device_Parser.Type' to type 'NSXMLParserDelegate?'

是否可以有多个解析器委托(delegate)进行不同的解析?我究竟做错了什么?我可以设置 parser.delegate = self,但我不知道如何将委托(delegate)设置为另一组 didStartElementdidEndElement 函数。抱歉,如果这是菜鸟错误,我仍在学习 Swift。

不是重复的问题我特意将此标记为 Swift 问题,并且提议的重复问题对我没有帮助。 Ole Begemann 的解决方案正是我所寻找的并解决了我的问题。

最佳答案

在这一行中:

parser.delegate = Device_Parser

您正在尝试分配一个作为解析器的委托(delegate)。您需要创建该类的实例并将其设为委托(delegate)。像这样的事情:

let parser = NSXMLParser(data: data!)
let deviceParser = Device_Parser()
parser.delegate = deviceParser
parser.parse()

正如 Arun Gupta 提到的,将该代码的一部分移至 Device_Parser 类本身可能是个好主意。

关于xml - Swift:拥有多个 NSXMLParser 委托(delegate)的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36369306/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com