为什么调用 XMLParser(contentsOfURL: rssURL) 会给出错误:“参数传递给不带参数的调用”?

Why calling XMLParser(contentsOfURL: rssURL) is giving error: 'Argument passed to call that takes no arguments'?

提问人:laurie 提问时间:5/7/2019 更新时间:5/7/2019 访问量:106

问:

我一直在学习本教程 https://www.appcoda.com/building-rss-reader-using-uisplitviewcontroller-uipopoverviewcontroller/ 其中一部分谈到了使用 NSXMLParser 解析 RSS 源:

以下是原始代码段方法:

func startParsingWithContentsOfURL(rssURL: NSURL) {
        let parser = NSXMLParser(contentsOfURL: rssURL)
        parser.delegate = self
        parser.parse()
    }

但是,我看到 NSXMLParser 现在是 XMLParser。我一直在尝试这个:

 func startParsingWithContentsOfURL(rssURL: NSURL) {
        func startParsingWithContentsOfURL(rssURL: NSURL) {
            let parser = XMLParser(contentsOfURL: rssURL)
            parser.delegate = self
            parser.parse()
        }
    }

这是我在其他地方看到的模型,但它给出了错误“参数传递给调用,没有参数”。虽然我认为这个错误是不言自明的,但我在其他地方看到过类似的代码,似乎(显然)适用于其他人。

我尝试的另一件事是:

let parser = XMLParser.init(contentsOf: rssURL)

但是,我遇到了同样的错误 - 知道我做错了什么吗?

iOS Swift XML 解析

评论

0赞 rmaddy 5/7/2019
1. 是哪一行导致了错误?2. 为什么函数在另一个函数里面?startParsingWithContentsOfURLstartParsingWithContentsOfURL
0赞 laurie 5/7/2019
let parser = XMLParser(contentsOfURL: rssURL) 这个。
0赞 rmaddy 5/7/2019
同样,为什么一个函数在另一个同名函数中?

答:

0赞 OOPer 5/7/2019 #1

你最好找到一篇现代文章,而不是看一些古代斯威夫特的考古遗迹。

如您所见,已重命名为 ,并引入了一个新类型。NSXMLParserXMLParserURL

func startParsingWithContentsOfURL(rssURL: URL) {
    guard let parser = XMLParser(contentsOf: rssURL) else {
        //...
        return
    }
    parser.delegate = self
    parser.parse()
}

请查看最新文档


更新

请试试这个:

func startParsingWithContentsOfURL(rssURL: URL) {
    guard let parser = Foundation.XMLParser(contentsOf: rssURL) else {
        //...
        return
    }
    parser.delegate = self
    parser.parse()
}

在旧的教程中,您定义了一个类。因此,您可能需要区分两个 s,Apple 的和您自己的。XMLParserXMLParser

我强烈、强烈、非常强烈地建议你找到一个为现代 Swift 编写的现代教程或示例。

评论

0赞 laurie 5/7/2019
感谢您的回复。但是,返回相同的错误。
0赞 OOPer 5/7/2019
@laurie,我的代码找不到相同的错误。不过,我可能误以为出了什么问题,因为我无法重现.您可能正在项目中定义另一个。Argument passed to call that takes no argumentsXMLParser
0赞 laurie 5/7/2019
谢谢!更新后的版本不会引发错误。相信我,如果我能找到更新版本,我会使用它!我希望构建一个基本的 RSS 阅读器,然后在此基础上构建更多功能。
0赞 OOPer 5/7/2019
@laurie,我本可以找到许多使用“swift rss reader”搜索的文章或示例代码,其中一些是用现代 Swift(4 或 5)编写的。最好检查它是在过去两年或更短的时间内写的。您最好访问搜索结果中的两到三个页面。