Skip to main content
 首页 » 操作系统

xml之Swift:创建一个 NSXMLNode

2024年01月01日34xxx_UU

我正在尝试使用 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’。”

谁能告诉我这是怎么回事?

请您参考如下方法:

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 提交错误报告。