SwiftUI - 检查图片是否存在

7

我试图在检查图片是否存在后执行代码。 问题在于我无法捕获空图片调用的状态。 结果是我得到了一个空图片,但如果可能的话,我宁愿放置一个占位图片。

   func procImage(inName: String) {


        switch (inName) {

        case inName:
            imageName = inName.lowercased()

        default:
            imageName = "blank"
        }


    }

请发布使用此逻辑的代码。 - Asperi
4个回答

7

这个检查很简单,但你需要确保默认图像始终存在。

func getSafeImage(named: String) -> Image {
   let uiImage =  (UIImage(named: named) ?? UIImage(named: "Default.png"))!
   return Image(uiImage: uiImage)
}


虽然使用UIImage来创建一个安全的Image是可以的,但是请注意,如果它是一个矢量图像,它将无法正确缩放。为了正确工作,Image需要访问文件本身。 - undefined

1
所有在这里提供的代码示例都可以工作,但是处理SVG时可能会导致图像模糊,这对我来说是一个很大的缺点。下面是一种保留您资产的矢量属性的解决方案:
// if you have a default image don't return an optional
func getImageNamed(_ imageName: String) -> Image? {
    if UIImage(named: imageName) == nil {
        return nil // Or whatever you want to be your default image
    }
    return Image(imageName)                   
}

1
来到这里给出这个答案! - undefined

0

尝试这段代码:

func procImage(inName: String) -> UIImage {
    if let confirmedImage = UIImage(named: inName) {
        return confirmedImage
    } else {
        return UIImage(named: "Default_Image.png")!
    }
}

1
这段代码无法编译,因为你需要强制默认图像不为空。返回UIImage(named: "Default_Image.png")! - 93sauu
不客气,另一方面,这个问题涉及到SwiftUI,所以该方法应该返回一个Image类型的对象,而不是UIImage。 :) - 93sauu

0
感谢大家的贡献。 虽然提供的解决方案在我的情况下并没有完全奏效,除了Moreno的解决方案,但它们为我提供了一条路线。 我不需要存储检查结果,只需验证文件的存在即可。 所以这就是我想出来的解决方案,它起作用了。 这可能不是最优解,因此改进的代码将受到欢迎。
func procImage(inName: String) {



        let imageConvertToLowercase = inName.lowercased()

        if getMember.firstName.lowercased() == imageConvertToLowercase {

            if (UIImage(named: imageConvertToLowercase) != nil) {

            imageName = imageConvertToLowercase

        } else {

            imageName = "blank"
        }

        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接