Swift:创建NSXMLNode
我正在尝试使用Swift创建一个NSXMLNode。基于(以及Xcode的自动完成),这看起来应该非常简单: 但我得到一个错误:“调用中缺少参数‘URI’的参数。” 然后我尝试:Swift:创建NSXMLNode,xml,swift,nsxmlnode,Xml,Swift,Nsxmlnode,我正在尝试使用Swift创建一个NSXMLNode。基于(以及Xcode的自动完成),这看起来应该非常简单: 但我得到一个错误:“调用中缺少参数‘URI’的参数。” 然后我尝试: var anAttribute: NSXMLNode = NSXMLNode.attributeWithName("name", URI: "uri", stringValue: "string") 这会产生同样令人迷惑的错误:“调用中的额外参数‘URI’。” 有人能告诉我这里发生了什么吗?attributeWith
var anAttribute: NSXMLNode = NSXMLNode.attributeWithName("name", URI: "uri", stringValue: "string")
这会产生同样令人迷惑的错误:“调用中的额外参数‘URI’。”
有人能告诉我这里发生了什么吗?attributeWithName()
返回任何对象?
,即id
的快速映射。所以你
必须将返回值强制转换为预期类型:
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 as
class func attributeWithName(_ name: String!,
stringValue value: String!) -> NSXMLNode!
使显式强制转换变得不必要。
你可以就此向苹果公司提交一份缺陷报告
class func attributeWithName(_ name: String!,
stringValue value: String!) -> NSXMLNode!