NSXMLParser:如果.parse()返回false,如何返回parseError?

sim*_*ons 2 nsxmlparser swift

在斯威夫特,我一直在尝试NSXMLParser.总的来说,我对概念和实施充满信心.

因此,我有一个函数myFunc(),它将包含对.parse()方法的调用.

如果该.parse()方法返回false如何使用委托函数直接parser(parser: NSXMLParser, parseErrorOccurred parseError: NSError)返回?我该如何访问错误?parseErrormyFunc()

我知道我可以打印错误.我可以看到我可以将其值赋给具有类级别范围的变量.但我猜是有一个更好的获得它.

func myFunc() {
    // ...
    myXmlParser!.delegate = self
    if myXmlParser!.parse() != true {
       // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我实现了委托功能

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {

    // ...
}

func parser(parser: NSXMLParser, foundCharacters string: String) {
    // ...
}

func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
    // ...
}

func parser(parser: NSXMLParser, parseErrorOccurred parseError: NSError) {
    // I know that I could print(parseError) or assign its value to a variable wth class level scope
}
Run Code Online (Sandbox Code Playgroud)

如何parseErrormyFunc()不将其值传递给范围更广的变量的情况下返回或以其他方式访问它?

Mar*_*n R 5

如果返回的parse()方法那么你可以使用它NSXMLParserfalse

var parserError: NSError? { get } // can be called after a parse is over to determine parser state.
Run Code Online (Sandbox Code Playgroud)

获取有关问题的信息的属性.该

var lineNumber: Int { get }
var columnNumber: Int { get }
Run Code Online (Sandbox Code Playgroud)

属性提供有关错误位置的更多信息.例:

if !myXmlParser.parse() {
    let error = myXmlParser.parserError
    let line = myXmlParser.lineNumber
    let col = myXmlParser.columnNumber
    println("XML parsing failed at \(line):\(col): \(error?.localizedDescription)")
}
Run Code Online (Sandbox Code Playgroud)