sissues使用swiftui

问题描述 投票:0回答:1
import Foundation struct DataModel: Identifiable { let id = UUID() let phoneExtension: Int var dataA: String var dataB: Bool mutating func toggleDataB() { dataB.toggle() } } var dataSet: [DataModel] = [ DataModel(phoneExtension: 1000, dataA: "Hi Ho", dataB: true), DataModel(phoneExtension: 2000, dataA: "Hi Ho", dataB: false), DataModel(phoneExtension: 3000, dataA: "Please", dataB: true), DataModel(phoneExtension: 4000, dataA: "Work", dataB: false), DataModel(phoneExtension: 5000, dataA: "For Me", dataB: true) ]

file 2-应用程序打开时的第一个窗口:

import SwiftUI struct ContentView: View { var body: some View { NavigationView{ List{ ForEach(dataSet.indices, id: \.self) { index in NavigationLink("\(dataSet[index].phoneExtension)", destination: PlaygroundSecondPage(dataIsOn: dataSet[index].dataB, index: index)) .foregroundColor(dataSet[index].dataB ? .black : .blue) } } } } }

file 3,您可以更改切换:

    import SwiftUI
    
    struct PlaygroundSecondPage: View {
        
        @State var dataIsOn: Bool
        var index: Int
        
        var body: some View {
            VStack{
                Text("dataIsOn: \(dataIsOn), in dataset: \(dataSet[index].dataB)")
                Toggle(
                    isOn: $dataIsOn,
                    label: {
                        Text("Toggle:")
                    })
                .onChange(of: dataIsOn) {
                    updateB()
                }
            }
        }
        
        func updateB() {
            dataSet[index].toggleDataB()
        }
    }

您需要掌握很多事情来使您的代码工作。
我建议您继续学习Swiftui并进行教程,
非常有用

here是您的代码的一个版本,该版本是编译并运行以帮助您开始的:

struct DataModel: Identifiable {
    let id = UUID()
    let phoneExtension: Int
    var dataA: String
    var dataB: Bool
}

struct ContentView: View {
    @State var dataSet: [DataModel] = [
        DataModel(phoneExtension: 1000, dataA: "Hi Ho", dataB: true),
        DataModel(phoneExtension: 2000, dataA: "Hi Ho", dataB: false),
        DataModel(phoneExtension: 3000, dataA: "Please", dataB: true),
        DataModel(phoneExtension: 4000, dataA: "Work", dataB: false),
        DataModel(phoneExtension: 5000, dataA: "For Me", dataB: true)
    ]
    
    var body: some View {
        NavigationStack{
            List($dataSet) { $item in
                NavigationLink("\(item.phoneExtension)", destination: PlaygroundSecondPage(item: $item))
                    .foregroundColor(item.dataB ? .black : .blue)
            }
        }
        // to show all dataB
        Button("Test button") {
            dataSet.forEach {
                print($0)
            }
        }.buttonStyle(.borderedProminent)
    }
}

struct PlaygroundSecondPage: View {
    @Binding var item: DataModel
    
    var body: some View {
        VStack{
            Text("dataIsOn: \(item.dataB), in dataset: \(item.dataB)")
            Toggle("Toggle:", isOn: $item.dataB)
            .onChange(of: item.dataB) {
                updateB()
            }
        }
    }
    
    func updateB() {
        // item.dataB is already updated from the Toggle
        print("----> updateB item.dataB: \(item.dataB)")
    }
}
arrays swiftui struct toggle mutating-function
1个回答
0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.