xml - SwiftUI - XML 解析和观察
问题描述
我正在开发一个通过 TCP 连接到服务器(使用网络框架)、发送命令和接收 XML 数据的应用程序。起初,我使用 structs 和 vars 以及 in和didStartElement
funcs ,我将新元素添加到数组并设置值。我发现它非常慢。之后我尝试了,虽然它使用了 Apple 的 XMLParser,但它的运行速度非常快。foundCharacters
didEndElement
SwiftyXMLParser
问题是我无法观察和更改 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?
}
解决方案
推荐阅读
- git - 删除未推送的提交
- c# - 找不到提供程序程序集“Microsoft.EntityFrameworkCore.SqlServer”。确保名称正确且被项目引用
- java - 如何使用 MongoDB 和 Java 在多列上获取唯一数据
- python - PermissionError:[Errno 13] 权限被拒绝:Python
- c# - Wix 工具集:如何从引导程序应用程序更改 Log PathVariable 属性?
- intellij-idea - 断点不适用于 GroovyShell 评估()
- node.js - 从 Amplify 服务向 EC2 机器发送 GET 请求
- google-apps-script - Google 表单 - 多项选择或复选框 - 其他正则表达式
- python - 如何使用 selenium 访问自定义配置文件?
- html - 如何设置子元素的z-index,使其不会爬到父元素上