У меня есть это в моем представлении:
Image(uiImage: viewModel.emojiImage)
Button(action: {
viewModel.updatesRandomEmojiImage()
}, label: {
Text("RANDOM EMOJI")
}).buttonStyle(FilledButton())
и эти методы в моей ViewModel:
@State var emojiImage: UIImage = UIImage()
func updatesRandomEmojiImage() {
guard let url = URL(string: randomEmojiUrl()) else { return }
downloadEmojiImage(fromUrl: url)
}
func randomEmojiUrl() -> String {
repository.emojis().randomElement()?.imageUrl ?? ""
}
private func downloadEmojiImage(fromUrl url: URL) {
if let data = try? Data(contentsOf: url) {
self.emojiImage = UIImage(data: data)!
}
}
Я пытаюсь сделать так, чтобы содержимое Image менялось всякий раз, когда я нажимаю кнопку «RANDOM EMOJI». Как я могу это сделать?





Я нашел ответ на эту проблему. Что я сделал:
В виртуальной машине я сделал свое изображение @Published вместо @State:
@Published var emojiImage: UIImage? = nil
Затем в представлении я добавил вызов .onReceive и изображение с использованием @State:
@State private var emojiImage: UIImage?
var body: some View {
ZStack {
emojiImage.map{Image(uiImage: $0)}
}.onReceive(viewModel.$emojiImage) { image
self.emojiImage = image
}
}