我正在尝试使用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'。”
谁能告诉我这里发生了什么?
答案 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提交有关该问题的错误报告。