2014-08-28 53 views
1

我试图用Swift创建一个NSXMLNode。这似乎是它应根据the class reference(和Xcode的自动完成)是非常简单的:Swift:创建一个NSXMLNode

var anAttribute: NSXMLNode = NSXMLNode.attributeWithName("name", stringValue: "string") 

但我得到一个错误:“缺少论据参数‘URI’呼叫”

我再试试:

var anAttribute: NSXMLNode = NSXMLNode.attributeWithName("name", URI: "uri", stringValue: "string") 

它产生同样诱人的错误:“在调用额外的参数‘URI’”

谁能告诉我这里发生了什么?

回答

3

attributeWithName()返回AnyObject?,Swift映射id。因此,你 有返回值转换成需要的类型:

let anAttribute = NSXMLNode.attributeWithName("name", stringValue: "string") as NSXMLNode 

,或者,如果你想检查是否有可能失败:

if let anAttribute = NSXMLNode.attributeWithName("name", stringValue: "string") as? NSXMLNode { 
    // success 
} else { 
    // failed 
} 

的根本原因是,客观-C功能

+ (id)attributeWithName:(NSString *)name stringValue:(NSString *)value 

返回id。如果它被声明为

+ (instancetype)attributeWithName:(NSString *)name stringValue:(NSString *)value 

(这是“现代”的方式来声明类/工厂方法),那么这将是 映射到斯威夫特

class func attributeWithName(_ name: String!, 
      stringValue value: String!) -> NSXMLNode! 

作出明确的转换是不必要的。 你可以向苹果公司提交一份关于这方面的错误报告。