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
。
我有一个使用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
。