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
相关产品推荐
相关产品推荐

