额外的参数错误初始化NSXMLDocument
我试图创建一个斯威夫特NSXMLDocument,但我发现在所谓的“额外的参数‘contentsOfURL’当我尝试创建我NSXMLDocument的时候,这里是我的代码:额外的参数错误初始化NSXMLDocument
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)
?
我在做什么错谢谢
编辑:其实,这种替换初始化:
var document = NSXMLDocument(contentsOfURL: url!, options: kNilOptions, error: &error)
工程,它是所有选项参数的第一个是有问题的(也是我不得不打开url),但现在,我没有得到如何选择一个特定的选项,如果我想?这里有什么问题?
检查类型推理。 (您可以通过选项单击变量名的任何地方它是用来做这个。)你会发现它是NSURL?
型(又名Optional<NSURL>
),而不是NSURL
。 NSXMLDocument
初始化程序init?(contentsOfURL:options:error:)
需要非可选的url,因此您对该初始化程序的调用将无法进行类型检查...,然后生成一条伪造错误消息。
(因为它没有通过类型检查,它假定你正在尝试调用不同的初始化程序......如果是这样的话,你的问题的确会是你有错误的参数,可能值得filing a bug。
你得到一个可选的出你的NSURL(string:)
调用因为初始化程序failable。如果您传递的字符串不是有效的URL,则该初始化程序返回nil而不是有效的NSURL
实例。 Swift非常重视确保您知道并正确处理代码中的可能nil,否则它们可能会导致您的应用程序出现问题。
你的解决方案力展开可选的(通过传递url!
到NSXMLDocument
),它满足编译“作品”:你确信被传递到NSXMLDocument
值是不可选的NSURL
类型。但是你并没有真正处理可能的零 - 如果你的url真的是零,你的应用程序将崩溃。在使用它之前,最安全的是test optionals for nil - 在这种情况下你真的应该这样做,因为你的字符串的内容可能在运行时改变,可能会创建一个伪造的URL。
除此之外,你对options
参数类型不匹配,也:原始类型NSXMLDocumentContentKind
枚举的是UInt
,而是由预期的参数类型是Int
。您可以将其转换为Int(NSXMLDocumentContentKind.XMLKind.rawValue)
。 (这个肯定值得filing a bug - 苹果的界面应该确保枚举和初始化类型匹配。)
最后,一个不相关的提示:您正在使用var
的一切,但你(只要你已经证明)不千变万化的变量指向什么。将let
用于不会更改的内容,如url
,category
和document
(请记住,您可以对可变对象进行常量引用)。这可以让编译器帮助您确保您的代码是正确的,并且可以(理论上至少)帮助它在构建时生成优化的代码。
我想通了,什么是错的,有两个问题:
- 我不得不解开的NSURL
- 最大的问题是,我NSXMLDocumentContentKind.XMLKind.rawValue
是UInt
而init
期待的Int
所以我代替我代码如下:
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)
,它工作正常:)
感谢您提供一般方法来查看错误的位置(以及这些建议)!是的,我会填写一个错误报告。感谢提到可用的初始化程序,我听过这个术语,但从来没有意识到它正在这样做,而这正是我正在寻找我的一些课程。 –