2014-08-28 58 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! 

作出明確的轉換是不必要的。 你可以向蘋果公司提交一份關於這方面的錯誤報告。

相關問題