我找到了此链接,并且有一些回答说我们可以解决两个任务:
我的数据模型包含Data
正确包含的可选内容,可用于Image
上的元素View
。
当前,因为我还没有找到一种方法来解决此问题并使用!
不安全的此标志:
Image(uiImage: UIImage(data: userService.user.imageData!)!)
当然,我不能保证并且我不应该使用它,但是需要帮助来解开它。
作为一种快速的解决方法,我可以将此图像数据属性设置为非可选,然后从本地文件加载一些数据,但是即使那样,我仍然可以在此处展开另外一个力UIImage(data
。
您有几种选择。我认为最直接的方法是在Image上进行扩展并定义一个新的初始化程序来满足您的需求:
extension Image {
public init?(data: Data?) {
guard let data = data,
let uiImage = UIImage(data: data) else {
return nil
}
self = Image(uiImage: uiImage)
}
}
然后,您可以像这样简单地使用它:
Image(data: userService.user.imageData)
因为它nullable
需要View
与其他至少一个包含在另一个中View
。
如果要提供占位符代替丢失的图像,可以使用如下扩展名:
extension Image {
public init(data: Data?, placeholder: String) {
guard let data = data,
let uiImage = UIImage(data: data) else {
self = Image(placeholder)
return
}
self = Image(uiImage: uiImage)
}
}
然后,您可以像这样简单地使用它:
Image(data: userService.user.imageData, placeholder: "nameOfPlaceholder")
因为不是nullable
这样,所以不需要View
与至少一个彼此包含在另一个容器中View
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句