【问题标题】:How to change array index in SwiftUI如何在 SwiftUI 中更改数组索引
【发布时间】:2021-10-19 00:58:36
【问题描述】:

我有一个调用数组索引来填充页面的页面视图。当发生某些事情时,我想增加索引以更新页面的内容。在此代码示例中,我在按下按钮时发生了这种情况。在我的真实应用程序中,我希望在计时器达到 0 时发生这种情况,但我怀疑如果我能弄清楚如何让这个按钮按下版本工作,我可以将其推断到我的真实用例中。以下是供您查看的简单代码:

import SwiftUI

struct LanguageStruct: Identifiable {
    var id = UUID()
    var groupTitle: String
    var title: String
    var subTitle: String
    var image: String
}

var progLanguages = [
    LanguageStruct(groupTitle: "Java", title: "Lame Langauge", subTitle: "Bad GUI", image: "Push-ups Wide"),
    LanguageStruct(groupTitle: "SwiftUI", title: "Nice and New", subTitle: "Better than Swift but incomplete", image: "Sit-ups")
]

struct Playground_arrays: View {
    
    @State private var index = 0
    var programming: LanguageStruct
    
    var body: some View {
        VStack {
            Text(programming.groupTitle)
            Text (programming.subTitle)
            Image(programming.image)
            
            Button(action:{
                //actions go here
                if index < 2{
                    index += 1
                    
                }else{
                    index = 0
                }
            }, label:{
                Text("Change Index")
                    .fontWeight(.semibold)
            })
            .buttonStyle(PrimaryButtonStyle(buttonColor: "PositiveGreen"))
        }
    }
}

struct Playground_arrays_Previews: PreviewProvider {
    static var previews: some View {
        Playground_arrays(programming: progLanguages[0])
            .previewDevice("iPhone 12 mini")
    }
}

有人可以帮我弄清楚如何在按下按钮时更新数组的索引,以便我可以更新页面内容吗?这似乎真的应该像上面的index var 计数器并将其放在programing: progLanguages[index] 字符串或其他东西一样简单,但我一生都无法弄清楚如何让它工作:(

【问题讨论】:

    标签: ios xcode swiftui


    【解决方案1】:

    只需将 programming 作为动态 getter:

    struct Playground_arrays: View {
        @State private var index = 0
    
        var programming: LanguageStruct {
            progLanguages[index]
        }
        
        var body: some View {
            VStack {
                Text(programming.groupTitle)
                Text (programming.subTitle)
                Image(programming.image)
                
                Button(action:{
                    //actions go here
                    if index < progLanguages.count - 1 {
                        index += 1
                    } else {
                        index = 0
                    }
                }, label:{
                    Text("Change Index")
                        .fontWeight(.semibold)
                })
                .buttonStyle(PrimaryButtonStyle(buttonColor: "PositiveGreen"))
            }
        }
    }
    

    【讨论】:

    • 你打败了我的答案......@jammyman34,你假设你没有更新你的索引。你之前是。您只是从未更新您的“编程”变量。通过将其设为计算属性,您将在每次更改索引时获得更新的语言。
    • 谢谢尤金,谢谢@Yrb!这就是为什么我不会辞掉作为 UX 设计师的日常工作!我什至不知道尤金写了什么,你说@Yrb 是可以写的。
    猜你喜欢
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 2016-12-05
    相关资源
    最近更新 更多