无法在函数外访问变量 Swift

Variable not accessible outside of function Swift

这是我试图在 Swift 中解析 XML 的问题,除值外,一切正常。

import UIKit


class ItemParser: NSObject, XMLParserDelegate {
var parser = XMLParser()
var element:String!
var currentName:String = String()


func beginParsing()
{
    parser = XMLParser(contentsOf:(NSURL(string:"URL"))! as URL)!
    parser.delegate = self
    parser.parse()
}

func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String])
{
    element = elementName
}

func parser(_ parser: XMLParser, foundCharacters string: String)
{
    if element.isEqual("name") {
        currentName = string
    }
    print (currentName) -- displaying correctly
}

func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?)
{
    if elementName.isEqual("inv") {

        print("begginging")
        print(currentName) -- displaying nothing

}
}

据我了解,我已在正确的位置声明了所有变量,但变量并未保留在函数之外。我做错了什么?

由于 XML 元素的字符值可能很大,因此可能会为同一元素多次调用 foundCharacters。因此,您必须将字符附加到 class 变量,直到为该元素调用 didEndElement

func parser(_ parser: XMLParser, foundCharacters string: String)
{
    if element.isEqual("name") {
        currentName += string  // append here
    }
}

并且您必须注意在新元素上正确重置此变量:

func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String])
{
    element = elementName
    currentName = ""  // reset 
}

func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?)
{
    if elementName.isEqual("inv") {

        print("begginging")
        print(currentName) // is now complete
    }
}

不要忘记 XML 是一种流式传输协议——这意味着——它不会一次给你所有的信息,所以你需要附加到你已经拥有的信息上。在foundCharacters中你需要做的是:

currentName += string

并在元素解析的start/end中更新currentName。

currentName = ""