首页 > 解决方案 > 如何在 Swift 中合并结构数组

问题描述

struct Message {
    var id: Int
    let referenceNumber : String
    let transactionNumber : String
    let transactionDate : String
}

struct Amount: Identifiable {
    var id: Int
    let value: Int
    let date: String
    var message = [Message]()
    }

let messages : [Message] = [
    .init(id: 0, referenceNumber: "RXX123", transactionNumber: "TXX123", transactionDate: "Jan/12/2021"),
    .init(id: 1, referenceNumber: "RXX124", transactionNumber: "TXX124", transactionDate: "Feb/12/2021"),
    .init(id: 2, referenceNumber: "RXX125", transactionNumber: "TXX125", transactionDate: "Jan/12/2021")
]

var amounts: [Amount] = [
    .init(id: 0, value: 1000,date: "Jan/12/2021"),
    .init(id: 1, value: 2000,date: "Feb/12/2021"),
    .init(id: 2, value: 3000,date: "Jan/12/2021")
]

我如何将两个结构数组与标识符“id”结合起来以形成一个工作字典,以便当有人点击 Amount 并将它们带到显示相关消息的下一个视图时,它可以用于 IOS 应用程序的各种视图TxnDate、RefNo 等的参考。

我正在使用它 Xcode 项目制作演示应用程序

struct FrontView: View {
    init(){
        UITableView.appearance().backgroundColor = .clear
        UITableViewCell.appearance().backgroundColor = .clear
    }
    @State private var selections: String? = nil
    
    let messages : [Message] = [
    .init(id: 0, referenceNumber: "RXX123", transactionNumber: "TXX123", transactionDate: "Jan/12/2021"),
    .init(id: 1, referenceNumber: "RXX124", transactionNumber: "TXX124", transactionDate: "Feb/12/2021"),
    .init(id: 2, referenceNumber: "RXX125", transactionNumber: "TXX125", transactionDate: "Jan/12/2021")
]
    
    var amounts: [Amount] = [
    .init(id: 0, value: 1000,date: "Jan/12/2021"),
    .init(id: 1, value: 2000,date: "Feb/12/2021"),
    .init(id: 2, value: 3000,date: "Jan/12/2021")
]
    var body: some View{
        NavigationView{
            VStack(alignment: .center){
                List{
                    ForEach(amounts){amount in
                        
                        NavigationLink(
                        destination: Text(amount.message),//not working
                        tag: "",
                        selection: $selections) {UserRow(user: amount)}
                    }
                }.background(DiamondBackground().edgesIgnoringSafeArea(.all))
                
                
            }
            
        }
        .navigationBarTitle(Text("Dynamic List"))
    }
}

标签: arraysswiftstruct

解决方案


我建议创建一个字典,并通过 Id 附加一个包含两个对象的元组,它将如下所示:

typealias MessageAmount = (Message,Amount)
var dict = [String:MessageAmount]
for (index,message) in messages.enumerated() {
    dict[message.id] = (message,amounts[index])
}

推荐阅读