如何解决SwiftUI中XMLParser的URLSession返回空或无
我正在尝试使用URLSession,XCode 12,SwiftUI解析XML,但是它一直返回[]或nil。如果我在解析后立即打印(请参见代码),则所有数据都已存在,但是由于某种原因,它似乎正在清除所有数据。
如果我使用.xml文件尝试该代码,则该代码可以正常工作,因此它必须在XMLParserDelegate类的URLSession中:
class ParseController: NSObject,XMLParserDelegate{
var items: [Item] = []
var itemStore: [Item]?
func loadData() {
let url = URL(string: "website")!
let request=URLRequest(url: url)
let task = URLSession.shared.dataTask(with: request) { (data,response,error) in
if data == nil {
print("dataTaskWithRequest error: \(String(describing: error?.localizedDescription))")
return
}
let parser = XMLParser(data: data!)
parser.delegate=self
parser.parse()
self.itemStore=self.items
print(self.itemStore)
}
task.resume()
/*
if let path = Bundle.main.url(forResource: "Items",withExtension: "xml") {
if let parser = XMLParser(contentsOf: path) {
parser.delegate = self
parser.parse()
self.itemStore=self.items
}
}
*/
}
然后用“视图”中的按钮进行调用:
struct MyParserView: View {
@State var itemsResult: [Item]?
var body: some View {
if ((itemsResult?.isEmpty) == nil) {
VStack {
Text("Stuff here")
Button(action: {
let parserControl = ParseController()
parserControl.loadData()
itemsResult = parserControl.itemStore
}){
Text("Push")
}
}
}else {
List{
ForEach(itemResult!,id:\.id){item in
Text(item.name)
}
}
}
}
}
解决方法
这不是XML的问题,而是SwiftUI的生命周期。 https://developer.apple.com/forums/thread/662429
TL; DR:我发布了itemStore,现在效果很好!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。