无法为图像阵列的表达式生成诊断
Posted
技术标签:
【中文标题】无法为图像阵列的表达式生成诊断【英文标题】:Failed to produce diagnostic for expression for image array 【发布时间】:2021-07-18 13:46:40 【问题描述】:我正在尝试将 SWiftUI 类中的 UIImage 数组用于 forEach 循环,但 Xcode 总是给我错误“无法为表达式生成诊断;”。我也尝试使用 Data 数组但同样的错误。下面是我的代码。如果有人能指出我做错了什么,那就太好了?
struct Sample: View
let imageArray: [UIImage]
var body: some View
ForEach(imageArray) image in
Image(uiImage: image)
【问题讨论】:
你必须初始化你的数组,例如 "var imageArray: [UIImage] = []" 为一个空数组。如果你想要一些 UIImage 在里面,你需要把它们放进去。 @workingdog,如果它作为初始化的一部分被传入,则不会。 【参考方案1】:这对我有用:
import SwiftUI
@main
struct TestApp: App
var body: some Scene
WindowGroup
ContentView()
struct Sample: View
let imageArray: [UIImage]
var body: some View
ForEach(imageArray, id: \.self) image in
Image(uiImage: image)
struct ContentView: View
@State var imageArray: [UIImage] = []
var body: some View
Sample(imageArray: imageArray)
.onAppear
if let img = UIImage(systemName: "globe")
imageArray.append(img)
【讨论】:
【参考方案2】:ForEach 运算符要求数组元素符合可识别的。对于像 UIImage 这样的东西,你可以传递 self。
var body: some View
ForEach(imageArray, id: \.self) image in
Image(uiImage: image)
就个人而言,我也会将它包装在一个堆栈中,只是为了明确
var body: some View
VStack
ForEach(imageArray, id: \.self) image in
Image(uiImage: image)
【讨论】:
您忘记了 ForEach 中的“id: \.self”。 @workingdog 谢谢,翻译迷路了。【参考方案3】:试试这个:
import SwiftUI
struct imageId: Identifiable
var id = UUID()
var image: UIImage
struct Sample: View
let imageArray: [imageId] = []
var body: some View
ForEach(imageArray, id: \.id) image in
Image(uiImage: image.image)
【讨论】:
【参考方案4】:我能够通过在 ForEach 循环中添加 id 来解决问题。下面是我的代码现在的样子。
struct ImageData: Identifiable
let id = UUID()
let image: UIImage
struct Sample: View
let imageDataArray: [ImageData]
var body: some View
ForEach(imageDataArray) imageData in
Image(uiImage: imageData.image)
我从这里学到的是,对于 UIImage 等对象,如果需要枚举,必须在 ForEach 循环上添加 id 属性。为了解决这个问题,我创建了一个包含 id 和 image 属性的模型类并枚举了它。
【讨论】:
如果ImageDate是Identifiable
,则不需要ForEach
中的id:
参数以上是关于无法为图像阵列的表达式生成诊断的主要内容,如果未能解决你的问题,请参考以下文章
使用诊断工具观察 Microsoft.Extensions.DependencyInjection 2.x 版本的内存占用