我试图创建一个列表视图,显示4个不同的图像和它们各自的标题。我的代码显示了4个不同的标题,即,enum backgroundOptions
的原始值。但它只显示4个模板标题下的4个不同图像中的一个。根据Apple的文档,Image
结构体需要String数据类型。因此,当我在String中显式键入其中一个图像的名称时,List中的所有4个空格都显示相同的模板。
看起来ForEach
没有迭代4个图像。有人能帮我看看我错过了什么吗?
我的数据文件看起来像这样:
import Foundation
struct Template {
var template: Templates
init(template: Templates) {
self.template = template
}
}
struct Templates {
var backgroundOptions: BackgroundOptions
enum BackgroundOptions: String, CaseIterable {
case blank = "Blank"
case fullBorder = "Full Border"
case laurelWreath = "Laurel Wreath"
case simpleLine = "Simple Lines"
}
}
我的视图文件看起来像这样:
import SwiftUI
struct TemplatesView: View {
var body: some View {
NavigationView {
VStack {
Text("Choose a Template to Edit").font(.headline)
List{
ForEach(Templates.BackgroundOptions.allCases,
id: \.self) { backgroundOptions in
ZStack {
Image(backgroundOptions.rawValue)
.resizable()
.aspectRatio(contentMode: .fit)
Text(backgroundOptions.rawValue)
.font(.title)
}
}
}
}
.navigationTitle("Epic Foundries🏆")
}
}
}
struct TemplatesView_Previews: PreviewProvider {
static var previews: some View {
TemplatesView()
}
}
我要使用的图像保存在“Assets”文件夹下。它们的名称为:
blank
fullBorder
laurelWreath
simpleLine
我是一个新手,所以这是我到目前为止所有的代码。我意识到可能需要一个ModelView文件。目标是给予用户一个模板,让他们可以在不同的视图中进行编辑。
1条答案
按热度按时间cyej8jka1#
它不起作用,因为枚举的原始值与您试图显示的图像名称不匹配。因此,您可能至少可以通过以下四种方式解决:
1.更新原始值以反映实际图像名称。
1.更新图像名称以反映原始值。
1.使用枚举值作为要加载的图像的名称。
1.将计算属性添加到枚举中以传递相应的映像名称。
选项3是这样做的:
替换
Ìmage(backgroundOptions.rawValue)
关于
Image("\(backgroundOptions)")
选项4可以像这样添加到枚举中:
。。。然后你这样使用:
Image(backgroundOptions.imageName)