SwiftUI 中的 XMLParser Decoder.shared

XMLParser in SwiftUI Decoder.shared

我有一个使用SwiftyXMLParser

编写的解码器

我急于寻求帮助,因为我的知识不足以在 SwiftUI 中使用解码数据。也就是说,我想在项目的其他文件中使用生成的文本。从这个例子我想你应该明白我想要什么。但该程序不起作用。指出错误或帮助编写代码以在 SwiftUI 中使用它

XML

<horo>
<date yesterday="02.05.2021" today="03.05.2021" tomorrow="04.05.2021" tomorrow02="05.05.2021"/>
<aries>
<yesterday> Сегодня вам, возможно, будет трудно собраться с мыслями и еще труднее решиться на какие-либо активные действия. Не стоит стараться пересилить упрямый организм, он таких вещей не прощает. </yesterday>
<today> Сегодня вы будете способны превратить самые тривиальные слова в изысканный сонет. Если вам удастся еще и слушателя найти соответствующего - проблема "где и с кем провести субботний вечер" будет решена. Возможно, навсегда. </today>
<tomorrow> Сегодня вам предстоит день, полный борьбы с непониманием в как рядах близких вам людей так и среди прочих. Возможно, вы его так и не победите. </tomorrow>
<tomorrow02> Сила вашего обаяния сегодня во многом будет зависеть от изысканности вашей речи. С помощью пары-другой изящный оборотов вы сможете покорить чье-то сердце. </tomorrow02>
</aries>
</horo>

HoroscopeDecoder.swift

import SwiftyXMLParser


我很崩溃,我的头在沸腾。我睡不着,我只是不知道该怎么办。请帮助我

如果其他一切都像您在评论中所说的那样工作,这可能会解决它:

class ViewModel : ObservableObject {
    @Published var text = ""
    
    func updateText() {
        HoroscopeDecoder.shared.run(sign: .scorpio, period: .today) { prediction in
            DispatchQueue.main.async {
              self.text = prediction
            }
        }
    }
}

struct ContentView: View {
    
    @StateObject var viewModel = ViewModel()
    
    
    var body: some View {
        Text(viewModel.text)
            .padding()
            .onAppear {
                viewModel.updateText()
            }
    }
    
}

通常,您不想在 View 代码中执行异步任务,尤其是在 init 中,这可能被称为 many次。相反,在 onAppear.

中调用它

此外,您的 URL 任务将 return 在不同的线程上 - 一旦您准备好更新 UI,您想使用 DispatchQueue.main.async