如何解决Swift错误中的XML解析器,无法转换RSSItem类型的值?
我一直在遵循旧的教程,该教程位于https://www.youtube.com/watch?v=fP69LI5bZlg,用于在Swift中创建XML解析器。在其中,对于完成处理程序,他具有:
func parserDidEndDocument(_ parser: XMLParser) {
parserCompletionHandler?(rssItems)
}
问题是它在rssItems上引发了错误并说:Cannot convert value of type '[RSSItem]' to expected argument type 'RSSItem'
自从本教程开始,Swift发生了什么变化,如何使它正常工作?下面提供了整个代码,以提供上下文。
struct RSSItem {
var title: String
var description: String
var link: String
var pubDate: String
}
// download xml from the internet
class FeedParser: NSObject,XMLParserDelegate
{
private var rssItems: [RSSItem] = []
private var currentElement = ""
private var currentTitle: String = ""
private var currentDescription: String = ""
private var currentPubDate: String = ""
private var currentLink: String = ""
private var parserCompletionHandler: ((RSSItem) -> Void)?
func parseFeed(url: String,completionHandler: ((RSSItem) -> Void)?)
{
self.parserCompletionHandler = completionHandler
let request = URLRequest(url: URL(string: url)!)
let urlSession = URLSession.shared
let task = urlSession.dataTask(with: request) { (data,response,error) in
guard let data = data else {
if let error = error {
print(error.localizedDescription)
}
return
}
let parser = XMLParser(data: data)
parser.delegate = self
parser.parse()
}
task.resume()
}
func parser(_ parser: XMLParser,didStartElement elementName: String,namespaceURI: String?,qualifiedName qName: String?,attributes attributeDict: [String : String] = [:]) {
if currentElement == "item" {
currentTitle = ""
currentDescription = ""
currentPubDate = ""
currentLink = ""
}
}
func parser(_ parser: XMLParser,foundCharacters string: String) {
switch currentElement {
case "title": currentTitle += string
case "description": currentDescription += string
case "pubDate" : currentPubDate += string
case "link" : currentLink += string
default: break
}
}
func parser(_ parser: XMLParser,didEndElement elementName: String,qualifiedName qName: String?) {
if elementName == "item" {
let rssItem = RSSItem(title: currentTitle,description: currentDescription,link: currentLink,pubDate: currentPubDate)
self.rssItems.append(rssItem)
}
}
func parserDidEndDocument(_ parser: XMLParser) {
parserCompletionHandler?(rssItems)
}
func parser(_ parser: XMLParser,parseErrorOccurred parseError: Error) {
print(parseError.localizedDescription)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。