Ios XML解析器出现Swift错误,无法转换RSSItem类型的值?
我一直在学习一个关于在Swift中创建XML解析器的老教程,该教程位于。其中,对于完成处理程序,他有:Ios XML解析器出现Swift错误,无法转换RSSItem类型的值?,ios,swift,xml,xcode,xml-parsing,Ios,Swift,Xml,Xcode,Xml Parsing,我一直在学习一个关于在Swift中创建XML解析器的老教程,该教程位于。其中,对于完成处理程序,他有: func parserDidEndDocument(_ parser: XMLParser) { parserCompletionHandler?(rssItems) } 问题是它在RSSItem上抛出了一个错误,并说:无法将类型为“[RSSItem]”的值转换为预期的参数类型“RSSItem” 自本教程以来,Swift发生了怎样的变化,我如何才能使其正常工作?下面是
func parserDidEndDocument(_ parser: XMLParser) {
parserCompletionHandler?(rssItems)
}
问题是它在RSSItem上抛出了一个错误,并说:无法将类型为“[RSSItem]”的值转换为预期的参数类型“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, namespaceURI: 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)
}
}
parserCompletionHandler:((RSSItem)->Void)
,它需要一个RSSItem
的实例。您有parserCompletionHandler?(rssItems)
,您有var rssItems:[RSSItem]
,它是RSSItem
的一个实例数组,请参见问题?它期待“一”,你给他一个列表(即使列表中只有一项,它也是一个列表)