SDWebImageSwiftUI - 如果第一个失败,如何加载后备图像?

Posted

技术标签:

【中文标题】SDWebImageSwiftUI - 如果第一个失败,如何加载后备图像?【英文标题】:SDWebImageSwiftUI - How to load a fallback image if the first one fails? 【发布时间】:2022-01-16 08:09:47 【问题描述】:

我需要获取另一张图片以防第一张图片失败并且我很难弄清楚如何使用 SDWebImageSwiftUI 进行此操作。

关于如何做到这一点的任何线索?

【问题讨论】:

SwiftUI 在哪里? 它实际上是一个 SwiftUI 专有库。 【参考方案1】:

您可以在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,但这似乎又会更复杂 你完全正确,它已经是一个可重用的视图。非常感谢! 是否有特殊原因将其取消标记为已接受的答案? 绝对不是。我想除了将其标记为已接受的答案之外,我还想对您的答案进行投票,并且不小心单击了“检查”按钮,将您的答案取消标记为已接受。我很抱歉!现在应该修好了。【参考方案2】:
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")))
        
 

上面的代码对我有用, 希望它对你有用:)

【讨论】:

1) 据我所知,.placeholder 中的视图应该在从服务器下载图像时显示,而不是在发生错误时显示。 2)我还需要从服务器获取后备图像,而不是您的示例中显示的本地 UIImage。

以上是关于SDWebImageSwiftUI - 如果第一个失败,如何加载后备图像?的主要内容,如果未能解决你的问题,请参考以下文章

如果我有一个多维数组,我怎样才能只访问第一个维度的第一个值?

PHP 如果第一个 var 为空,则使用第二个

如果可用,则选择第二行(如果不是第一行)

如果第一个通知在 swift 中被忽略,则安排第二个通知(或者如果通知被忽略,则完成任何操作)

如果需要第一个函数,如何在脚本中执行第二个函数?

如果重复,加入表获取第一个表上的第一个数据