首页 > 解决方案 > SwiftUI - XML 解析和观察

问题描述

我正在开发一个通过 TCP 连接到服务器(使用网络框架)、发送命令和接收 XML 数据的应用程序。起初,我使用 structs 和 vars 以及 in和didStartElementfuncs ,我将新元素添加到数组并设置值。我发现它非常慢。之后我尝试了,虽然它使用了 Apple 的 XMLParser,但它的运行速度非常快。foundCharactersdidEndElementSwiftyXMLParser

问题是我无法观察和更改 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?
}

标签: xmlnetworkingtcpswiftui

解决方案


推荐阅读