从数组中显示带有名称的随机图像。 (SwiftUI)

Posted

技术标签:

【中文标题】从数组中显示带有名称的随机图像。 (SwiftUI)【英文标题】:Show random images with their names from an array. (SwiftUI) 【发布时间】:2020-03-21 11:24:42 【问题描述】:

swiftUI 新手,我需要通过按钮操作随机显示图像及其名称。每次用户点击 contentView 文件中的按钮时,我应该如何调用图片的数组来显示随机图片?

这是我想在 contentView 中随机显示的图片数组(图片放在 Assets 文件夹中):

struct aPicture: Identifiable 
    var id: Int
    var name: String
    var imageName: String



let pictures = [
    aPicture(id: 0, name: "1", imageName: "1"),
    aPicture(id: 1, name: "2", imageName: "2"),
    aPicture(id: 2, name: "3", imageName: "3"),
    aPicture(id: 3, name: "4", imageName: "4"),
    aPicture(id: 4, name: "5", imageName: "5"),
    aPicture(id: 5, name: "6", imageName: "6"),
]

【问题讨论】:

到目前为止你尝试过什么?你会显示代码吗? 【参考方案1】:

你可以试试这个:

 struct ContentView: View 

    struct aPicture: Identifiable 
        var id: Int
        var name: String
        var imageName: String
    

    @State var random : Int = 0


    let pictures = [
        aPicture(id: 0, name: "1", imageName: "1"),
        aPicture(id: 1, name: "2", imageName: "2"),
        aPicture(id: 2, name: "3", imageName: "3"),
        aPicture(id: 3, name: "4", imageName: "4"),
        aPicture(id: 4, name: "5", imageName: "5"),
        aPicture(id: 5, name: "6", imageName: "6"),
    ]

    var body: some View 
        VStack 
            HStack 
                Spacer()
                Text(pictures[self.random].name)
                    .background(Color.white)
                Spacer()
                Button("Next image") 
                    self.random = Int.random(in: 0..<self.pictures.count)
                
                Spacer()
            

            Image(pictures[self.random].imageName)
            .resizable()
            .scaledToFit()
        
    

【讨论】:

如何在文本框中显示“aPicture”的“name”属性,由您的“随机”代码随机选择? 我更新了答案,现在也显示了图片的名称。【参考方案2】:

我建议你采取不同的方法。 1)你可以直接生成随机元素

let picture = pictures.randomElement() ?? default_if_empty_collection

2) 用户希望在点击后看到不同的图片,这不可能。您的“商店”中的图片越少,您更有可能随机生成相同的图片(这可能看起来像“点击时什么都没有发生”)

下一个 sn-p 展示了如何解决这个问题。每次点击用户都会看到不同的图片,即使我们的收藏中只有树图片。

import SwiftUI

struct ContentView: View 
    @State var img  = Image(systemName: "questionmark.square.fill")
    let imgs = [Image(systemName: "trash"),
                Image(systemName: "trash.fill"),
                Image(systemName: "trash.slash"),

    ]

    var body: some View 
        img
            .resizable()
            .scaledToFit()
            .frame(maxWidth: .infinity)
            .onTapGesture 
                var tmp: Image
                repeat 
                    tmp = self.imgs.randomElement() ?? self.img
                 while tmp == self.img
                self.img = tmp
        
    


struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView()
    

【讨论】:

谢谢,这很酷。但是我不得不随机选择一个带有各种属性(例如名称、日期、位置等)的图像,然后在堆栈视图中显示它们。 没问题,你可以。你有一些集合,你可以从中随机获取元素并检查它是否与当前不同......

以上是关于从数组中显示带有名称的随机图像。 (SwiftUI)的主要内容,如果未能解决你的问题,请参考以下文章

使用 SwiftUI 移动带有图像的按钮

Swift UI:使用数组中的随机元素更新视图

带有文本和图像的 SwiftUI 表单选择器

在SwiftUI中按下按钮时的随机图像[关闭]

Swift从数组中选择一个随机图像

如何在 SwiftUI 的新地图视图中制作可点击的图钉?