You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中如何根据Key展示Loan Struct字典Terms的指定值

解决SwiftUI中展示Loan结构体Terms字典特定键值的问题

我正在尝试展示API返回的贷款数据,目前SwiftUI布局已经能显示Loan实例的账户、借款人相关信息,现在需要在指定位置,根据键名展示Loan结构体中Terms字典(类型为[String: String?])的特定键值对,比如PurchaseDate、NoteRate对应的值。

原代码参考

SwiftUI布局代码

VStack(alignment: .leading) {
    HStack(alignment:.top) {
        Text("\(network.loan?.account ?? "no account")").bold()
        
        VStack(alignment: .leading) {
            
            Text(network.loan?.primaryBorrower.fullName ?? "").bold()
            Text(network.loan?.primaryBorrower.street ?? "")
            Text(network.loan?.primaryBorrower.city ?? "")
            Text(network.loan?.primaryBorrower.state ?? "")
            Text(network.loan?.primaryBorrower.zipCode ?? "")
            //This is where I want to add Terms based on desired Key(s)
            //Terms - Key: "PurchaseDate", Value: "01/01/2019"
            //Terms - Key: "NoteRate", Value: "6.20%"
        }
    }
    .frame(width: 300, alignment: .leading)
    .padding()
    .cornerRadius(20)
}

Loan结构体定义

struct Loan: Codable {
    let type, account: String
    let byLastName: String?
    let terms: [String: String?]
    
    enum CodingKeys: String, CodingKey {
        case type = "__type"
        case account = "Account"
        case byLastName = "ByLastName"
        case terms = "Terms"
    }
}

实现方案

利用Swift的可选链和**空合运算符(??)**即可安全获取并展示Terms字典中的特定键值,直接替换原注释位置的代码即可。如果需要展示多个键,还可以通过循环优化代码复用性。

基础写法(直接添加Text组件)

VStack(alignment: .leading) {
    HStack(alignment:.top) {
        Text("\(network.loan?.account ?? "no account")").bold()
        
        VStack(alignment: .leading) {
            
            Text(network.loan?.primaryBorrower.fullName ?? "").bold()
            Text(network.loan?.primaryBorrower.street ?? "")
            Text(network.loan?.primaryBorrower.city ?? "")
            Text(network.loan?.primaryBorrower.state ?? "")
            Text(network.loan?.primaryBorrower.zipCode ?? "")
            
            // 展示PurchaseDate,值为空时显示"N/A"
            Text("Purchase Date: \(network.loan?.terms["PurchaseDate"] ?? "N/A")")
            // 展示NoteRate,值为空时显示"N/A"
            Text("Note Rate: \(network.loan?.terms["NoteRate"] ?? "N/A")")
        }
    }
    .frame(width: 300, alignment: .leading)
    .padding()
    .cornerRadius(20)
}

优化写法(循环展示多键)

如果需要展示更多Terms中的键,可将键名和显示标签存入数组,通过ForEach循环生成组件,后续新增键只需修改数组:

// 定义需要展示的键与对应显示标签
private let desiredTermKeys = [
    ("PurchaseDate", "Purchase Date"),
    ("NoteRate", "Note Rate")
]

// 布局中替换对应代码
VStack(alignment: .leading) {
    HStack(alignment:.top) {
        Text("\(network.loan?.account ?? "no account")").bold()
        
        VStack(alignment: .leading) {
            
            Text(network.loan?.primaryBorrower.fullName ?? "").bold()
            Text(network.loan?.primaryBorrower.street ?? "")
            Text(network.loan?.primaryBorrower.city ?? "")
            Text(network.loan?.primaryBorrower.state ?? "")
            Text(network.loan?.primaryBorrower.zipCode ?? "")
            
            // 循环展示所有指定的Terms键值
            ForEach(desiredTermKeys, id: \.0) { key, label in
                Text("\(label): \(network.loan?.terms[key] ?? "N/A")")
            }
        }
    }
    .frame(width: 300, alignment: .leading)
    .padding()
    .cornerRadius(20)
}

代码说明

  • network.loan?.terms["KeyName"]:通过可选链安全访问字典值,避免因loan为nil或键不存在导致崩溃
  • ?? "N/A":空合运算符,当值为nil时显示替代文本,提升界面友好性

内容的提问来源于stack exchange,提问作者salazar44

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 05:13:01