SwiftUI - XML синтаксический анализ и наблюдение - PullRequest
1 голос
/ 28 мая 2020

Я разрабатываю приложение, которое подключается к серверу через TCP (с использованием сетевой инфраструктуры), отправляет команды и получает XML данные. Сначала я использовал структуры и переменные, а в функциях didStartElement, foundCharacters и didEndElement я добавил новые элементы в массивы и установил значения. Я выяснил, что это очень медленно. После этого я попробовал SwiftyXMLParser, и хотя он использует XMLParser от Apple, он работает очень быстро.

Проблема в том, что я не могу наблюдать и изменять представление SwiftUI.

struct ConnectView: View {

    @ObservedObject var connector = Connector.shared
    @State var login = ""
    @State var password = ""

    var body: some View {
        ZStack {
            if connector.serverStatus.connected { //<---ok
//            if connector.xml?.server_status["connected"].bool ?? false { // <---not ok
                MainView().transition(.opacity)
            } else {
                TextField("Login", text: $login)
                SecureField("Password", text: $password)
                Button(action: connect) { Text("Connect") }
            }
        }
    }
}

class Connector: ObservableObject {

    private init() {}

    static let shared = Connector()
    @Published var xml: XML.Accessor!
    @Published var serverStatus: ServerStatus = ServerStatus()

    private static var connection: NWConnection?

    private static func receive() {
       connection?.receive(minimumIncompleteLength: 1, maximumLength: 65535) { (data, _, _, error) in

        //…
        shared.serverStatus.connected = Bool(shared.xml["server_status"].attributes["connected"] ?? "false") ?? false
        //…

        }
     }
}

struct ServerStatus {
    var id: Int?
    var connected: Bool = false
    var recover: Bool?
    var serverTimeZone: String?
    var systemVersion: Int?
    var build: Int?
    var status: String?
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...