每次点击随机化按钮时,如何从 restaurantList 访问随机值

Posted

技术标签:

【中文标题】每次点击随机化按钮时,如何从 restaurantList 访问随机值【英文标题】:How do I access a random value from the restaurantList each time I tap the randomize button 【发布时间】:2021-10-13 18:32:27 【问题描述】:
struct RandomizeTab: View 
    
    var restaurantInfo = Restaurants()
    
    var body: some View 
        
        NavigationView 
            NavigationLink(
                destination: DetailView(restaurantInfo: restaurantInfo.restaurantList[Int.random(in: 0...restaurantInfo.restaurantList.count-1)]),
                label: 
                    Text("Randomize")
                        .font(.title3)
                        .fontWeight(.bold)
                        .padding()
                        .background(Color.red)
                        .foregroundColor(.white)
                        .clipShape(Capsule())
                )
            
        

    

目前,此代码从列表中随机选择一家餐厅,并且每次点击它时都不会从列表中选择一家新的随机餐厅。

【问题讨论】:

数组有随机元素方法 【参考方案1】:

NavigationLink 目的地是在视图的第一次渲染时计算的。因此,您的随机计算只会被调用一次。一种解决方案是使用延迟加载视图的NavigationLink。有一个 *** 的答案是我借用的:(https://***.com/a/61234030/560942)


struct ContentView : View 
    var elements = [1,2,3,4,5,6,7]
    
    var body: some View 
        NavigationView 
            NavigationLink(destination:
                            NavigationLazyView(DetailView(input: elements.randomElement()!))
            ) 
                Text("Go to random")
            
        
    


struct NavigationLazyView<Content: View>: View 
    let build: () -> Content
    init(_ build: @autoclosure @escaping () -> Content) 
        self.build = build
    
    var body: Content 
        build()
    


struct DetailView : View 
    var input : Int
    
    var body: some View 
        Text("\(input)")
    

现在内容是惰性计算的,所以每次都是随机计算。

【讨论】:

以上是关于每次点击随机化按钮时,如何从 restaurantList 访问随机值的主要内容,如果未能解决你的问题,请参考以下文章

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

如何每次从 Firebase 数据库中获取随机 UId?

如何创建随机数的多个阵列为JavaScript数据随机化?

每次单击按钮时如何删除数组中的对象?

XCTest:如何从数组中点击按钮

如何在 Xcode11 中的 Swift 中随机播放数组中的音频文件?