【发布时间】:2022-01-16 08:09:47
【问题描述】:
我需要获取另一张图片以防第一张图片失败并且我很难弄清楚如何使用 SDWebImageSwiftUI 进行此操作。
关于如何做到这一点的任何线索?
【问题讨论】:
-
SwiftUI 在哪里?
-
它实际上是一个 SwiftUI 专有库。
标签: ios swift image swiftui sdwebimage
我需要获取另一张图片以防第一张图片失败并且我很难弄清楚如何使用 SDWebImageSwiftUI 进行此操作。
关于如何做到这一点的任何线索?
【问题讨论】:
标签: ios swift image swiftui sdwebimage
您可以在WebImage 上使用onFailure 属性。像这样的东西可以工作:
import SDWebImageSwiftUI
struct DoubleImageView: View {
@State var url = URL(string: "https://via.placeholder.com/150x150.jpg")
var body: some View {
WebImage(url: url)
.placeholder(Image(systemName: "person").resizable())
.onFailure { _ in
url = URL(string: "https://via.placeholder.com/72x72.jpg")
}
.resizable()
.frame(width: 100, height: 100)
}
}
只需将初始 url 更改为 "https://via.placeholder.com",这将导致加载图像失败,进而更新 url 并使用新的 url 重新加载图像。
【讨论】:
View,所以你可以使用它而不是WebImage,只需在初始化程序中传递两个url以及你想要添加的其他属性。我不确定您是否可以将其创建为ViewModifier,因为它需要@State,扩展也是如此。或者,您可以使用ImageManager 并推出您自己的解决方案,但这会更复杂,或者您可以使用UIViewRepresentable 包装UIImageView,但这似乎又会更复杂
import SDWebImageSwiftUI
struct ContentView: View {
var body: some View {
WebImage.init(url: URL(string: "https://via.placeholder.com/300/09f.png/fff"))
.placeholder(Image(uiImage: #imageLiteral(resourceName: "placeholder")))
}
}
上面的代码对我有用, 希望它对你有用:)
【讨论】: