提问者:小点点

如果不让还会给出“可选的必须被解除包装”的错误


下面是我的结构:

struct EditableCircleImage: View {

    @State private var image: Image?
    @State private var inputImage: UIImage?
    @State private var animatedImage: AnimatedImage?

    var body: some View {
        ZStack {
        ...
        }
            
    }
    func loadImage() {
        guard let img = inputImage else {
            return
        }
        animatedImage = AnimatedImage(data: img.jpegData(compressionQuality: .infinity))
    }
}

我在LoAdImage()中的AnimatedImage赋值出现以下错误:

Value of optional type 'Data?' must be unwrapped to a value of type 'Data'

即使img被保证不是null,因为它是从guard let创建的。

我还测试了if let inputImage=inputImage,它给出了相同的错误。

知道为什么吗?


共1个答案

匿名用户

如jpegData文档中所述(CompressionQuality:)

申报

func jpegData(compressionQuality: CGFloat) -> Data?

返回值

包含JPEG数据的数据对象,如果生成数据时出现问题,则为nil。 如果图像没有数据,或者基础CGImageRef包含不支持的位图格式的数据,则此函数可能返回nil。

所以基本上不是img对象导致了这个错误。 但它是UImagejpegdata属性的返回值。

您可以使用Guard letIf letJPEGData属性获取显式值。