无法在函数外访问变量 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 = ""
这是我试图在 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 = ""