少し珍しい質問かもしれませんが、私は Swiftui を学んでいます。Storyboard で期待どおりに動作している XMLMapper を使用して、Alamofire からの XML 結果を解析しようとしています。UITableviewController にデータを表示できます。
問題は、SwiftUI で XMLMapper オブジェクトからテーブルビュー (リスト) に結果を表示するにはどうすればよいですか?
ストーリーボードモードで使用しているコードの下。
前もって感謝します!パトリック
import UIKit
import Alamofire
import XMLMapper
import SwiftKeychainWrapper
class AllLines: UITableViewController {
let redirector = Redirector(behavior: .doNotFollow)
let requestUrl = "https://\(KeychainWrapper.standard.string(forKey: "KeychainServer") ?? ""):443"
var Rows: [Row] = []
override func viewDidLoad() {
super.viewDidLoad()
GetLines()
}
// MAP CARD DETAILS //
class Result: XMLMappable {
var nodeName: String!
var error: String?
var rowset: Rowset?
required init?(map: XMLMap) {}
func mapping(map: XMLMap) {
error <- map.attributes["error"]
rowset <- map["ROWSET"]
}
}
class Rowset: XMLMappable {
var nodeName: String!
var rows: [Row]?
required init?(map: XMLMap) {}
func mapping(map: XMLMap) {
rows <- map["ROW"]
}
}
class Row: XMLMappable {
var nodeName: String!
var name: String?
var hostname: String?
var lineid: String?
required init?(map: XMLMap) {}
func mapping(map: XMLMap) {
name <- map["NAME"]
hostname <- map["HOSTNAME"]
lineid <- map["LINEID"]
}
}
//MAP CARD DETAILS//
func GetLines() {
class GetAllPersonsQuery: XMLMappable {
var nodeName: String!
var sql: String?
init() {}
required init?(map: XMLMap) {}
func mapping(map: XMLMap) {
sql <- (map["sql"], XMLCDATATransform())
}
}
let getallpersonsquery = GetAllPersonsQuery()
getallpersonsquery.nodeName = "query"
getallpersonsquery.sql = "select name, hostname, lineid from line"
AF.request(requestUrl, method: .post, parameters: getallpersonsquery.toXML(), encoding: XMLEncoding.default)
.redirect(using: redirector)
.responseXMLObject { (response: DataResponse<Result, AFError>) in
switch response.result {
case .success(let value):
debugPrint(value)
print("AF-Success")
self.Rows = value.rowset?.rows ?? []
self.tableView.reloadData()
debugPrint(response)
case .failure(let error):
print("AF-Error")
print(error)
}
}
}