Невозможно сохранить значение в глобальном массиве SWIFT.IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно сохранить значение в глобальном массиве SWIFT.

Сообщение Anonymous »

Я пытаюсь реализовать синтаксический анализ XML из URL. Я написал два файла:
MyXMLParser.swift

Код: Выделить всё

import Foundation

struct Order {
var orderID: String!
var productCode: String!
}

class MyXMLParser: NSObject, XMLParserDelegate{
private var orders = [Order]()
private var currentElement: String = ""
private var currentID: String = "" {
didSet {
currentID = currentID.trimmingCharacters(in: .whitespacesAndNewlines)
}
}

private var currentProdCode: String = "" {
didSet {
currentProdCode = currentProdCode.trimmingCharacters(in: .whitespacesAndNewlines)
}
}
private var parserCompletionHandler: (([Order]) -> Void)?

func parseFeed(stringURL: String, completionHandler: (([Order]) -> Void)?) {
self.parserCompletionHandler = completionHandler

if let encodedString = stringURL.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed), let validURL = URL(string: encodedString)
{
let request = URLRequest(url: validURL)
let urlSession = URLSession.shared
let task = urlSession.dataTask(with: request) { (data, responds, error) in
if let validData = data
{
//parse XML Data
let parser = XMLParser(data: validData)
parser.delegate = self
parser.parse()
}
else
{
print("do not have data received")
}
}

task.resume()
}
else
{
print("unable to create url")
}

}

// MARK: - XML Parser functions

func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
currentElement = elementName
if currentElement == "Orders"{
currentID = ""
currentProdCode = ""
}
}

func parser(_ parser: XMLParser, foundCharacters string: String) {
switch currentElement {
case "OrderID":
if currentID == "" {
currentID += string
}
case "ProductCode":
currentProdCode += string
default:
break
}

}

func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
if elementName == "Orders" {
let order = Order(orderID: currentID, productCode: currentProdCode)
self.orders.append(order)
}

}

func parserDidEndDocument(_ parser: XMLParser) {
parserCompletionHandler?(orders)
}

func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error) {
print("Error when parsing Falcon XML, \(parseError.localizedDescription) ")
}

}
Свифт-файл контроллера табличного представления:

Код: Выделить всё

import UIKit

class XMLTableViewController: UITableViewController, XMLParserDelegate {

private let testURL = "http://www.XXXX.com/....."
var orders = [Order]()

override func viewDidLoad() {
super.viewDidLoad()

fetchData()
print("test3:", self.orders)
}

func fetchData(){
let myParser = MyXMLParser()
myParser.parseFeed(stringURL: testURL) { (orders) in

print("test1: ", orders)
self.orders = orders
print("test2: ", self.orders)

OperationQueue.main.addOperation {
self.tableView.reloadSections(IndexSet(integer: 0), with: .left)
}
}

print("test:", self.orders)

}

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) ->  Int {
// #warning Incomplete implementation, return the number of sections
return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 0
}
На консоли:

Код: Выделить всё

test: []
test3: []
test1:  [XXXXXXX.Order(orderID: Optional("8963"), productCode: Optional("182SLD-UFPLP-B"))]
test2:  [XXXXXXX.Order(orderID: Optional("8963"), productCode: Optional("182SLD-UFPLP-B"))]
Меня смущает, поскольку я написал это "

Код: Выделить всё

self.orders = orders
" и test1, test2 показывает, что в локальной переменной "orders" есть данные, почему глобальная переменная order пуста?
Пожалуйста, помогите мне, я ценю это.

Подробнее здесь: https://stackoverflow.com/questions/590 ... rray-swift
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»