首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >初始化NSXMLDocument时出现额外的参数错误

初始化NSXMLDocument时出现额外的参数错误
EN

Stack Overflow用户
提问于 2015-01-06 18:47:05
回答 2查看 565关注 0票数 0

我试图在Swift中创建一个NSXMLDocument,但是当我试图创建我的NSXMLDocument时,我得到了一个“额外的参数'contentsOfURL‘”,下面是我的代码:

代码语言:javascript
复制
var url = NSURL(string: "http://api.openweathermap.org/data/2.5/weather?q=\(self.cityField.stringValue)&mode=xml")
var category = NSXMLDocumentContentKind.XMLKind.rawValue
var error: NSError? = NSError()

var document = NSXMLDocument(contentsOfURL: url, options: category, error: &error)

我做错什么了?谢谢。

编辑:实际上,将初始化替换为:

代码语言:javascript
复制
var document = NSXMLDocument(contentsOfURL: url!, options: kNilOptions, error: &error)

工作中,首先有问题的是options参数(而且我还必须打开url),,但是现在,如果我想选择一个特定的选项,我不知道如何选择?这里出了什么问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-06 19:15:36

检查url的类型推断。(您可以通过选项来做到这一点--在使用变量名称的任何地方单击它。)您会发现它的类型是NSURL? (又名Optional<NSURL>),而不是NSURLNSXMLDocument初始化程序init?(contentsOfURL:options:error:)需要一个非可选的url,所以您对该初始化器的调用失败了类型检查.然后产生虚假的错误消息。

(因为类型检查失败,它假设您试图调用不同的初始化器.如果是这样的话,你的问题就是你有错误的论点。或许值得将错误归档考虑。)

您可以从NSURL(string:)调用中获得一个可选的选项,因为该初始化程序是可故障。如果传递的字符串不是有效的URL,则该初始化程序返回的是零,而不是有效的NSURL实例。Swift非常认真地确保您知道并正确处理代码中可能出现的nils,因为否则它们会给您的应用程序带来问题。

强制解包装的解决方案(通过将url!传递给NSXMLDocument)“工作”,因为它满足编译器的要求:您已经确保传递给NSXMLDocument的值是非可选的NSURL类型。但你还没有真正处理可能的零-如果你的网址真的是零,你的应用会崩溃在这条线上。在使用它们之前,零测试选项是最安全的--在这种情况下,您确实应该这样做,因为您的字符串的内容在运行时可能会发生变化,可能会创建一个虚假的URL。

此外,options参数上也存在类型不匹配:NSXMLDocumentContentKind枚举的原始类型是UInt,但该参数所期望的类型是Int。您可以使用Int(NSXMLDocumentContentKind.XMLKind.rawValue)来转换它。(这一款绝对值得将错误归档 --苹果的接口应该确保枚举和初始化器类型匹配。)

最后,还有一个不相关的提示:您对任何事情都使用var,但您(就您所展示的)从未更改您的变量指向的内容。将let用于不改变的事物,如urlcategory和可能的document (请记住,您可以对可变对象进行常量引用)。这使得编译器可以帮助您确保代码是正确的,并且(至少在理论上)可以帮助它在构建时生成优化的代码。

票数 2
EN

Stack Overflow用户

发布于 2015-01-06 19:03:03

我想出了什么问题,有两个问题:

  • 我不得不打开NSURL
  • 最大的问题是,我的NSXMLDocumentContentKind.XMLKind.rawValue是一个UInt,而init需要一个Int,所以我用以下代码替换了代码:
代码语言:javascript
复制
var url = NSURL(string: "http://api.openweathermap.org/data/2.5/weather?q=\(self.cityField.stringValue)&mode=xml")
var category = Int(NSXMLDocumentContentKind.XMLKind.rawValue)
var error:NSError?
var document = NSXMLDocument(contentsOfURL: url!, options: category, error: &error)

它工作得很好:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27805115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档