Swift:创建NSXMLNode

时间:2014-08-28 02:59:04

标签: xml swift nsxmlnode

我正在尝试使用Swift创建NSXMLNode。基于the class reference(以及Xcode的自动完成),这看起来应该非常简单:

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

但是我收到一个错误:“在调用中缺少参数'URI'的参数。”

然后我尝试:

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

它会产生同样错误的错误:“调用中的额外参数'URI'。”

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

1 个答案:

答案 0 :(得分:3)

attributeWithName()返回AnyObject?,即id的Swift映射。所以你 必须将返回值强制转换为预期类型:

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

或者,如果您想检查可能的失败:

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

根本原因是Objective-C函数

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

返回id。如果它被声明为

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

(这是声明类/工厂方法的“现代”方式)然后就是这样 映射到Swift为

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

不需要显式演员。 您可以向Apple提交有关该问题的错误报告。