如何访问Swift结构体内部的字典?附Codable结构体代码示例
嘿,看起来你是想访问TransactionsObject里的交易列表内容对吧?先纠正个小细节:你代码里的UserInitiatedTransactions和UserReceivedTransactions是可选数组类型([UserEdTransaction]?),不是字典哦~不过没关系,我来一步步教你怎么安全地访问这些内容:
步骤1:补全并确认结构体定义
首先先补全UserEdTransaction的完整结构(假设你原本的代码没写完),这样后续访问属性才有依据:
struct UserEdTransaction: Codable { let transactionId: String let amount: Double let sender: String? let recipient: String? // 这里可以添加你需要的其他字段 } // 你的TransactionsObject可以简化(CodingKeys和属性名完全一致时,无需显式声明) struct TransactionsObject: Codable { let UserInitiatedTransactions: [UserEdTransaction]? let UserReceivedTransactions: [UserEdTransaction]? }
步骤2:获取TransactionsObject实例
你需要先有一个TransactionsObject的实例,要么是从JSON解析来的(因为它遵循Codable),要么手动创建测试用例:
// 手动创建测试实例 let testTransaction = UserEdTransaction( transactionId: "TX_001", amount: 100.5, sender: "Bob", recipient: "You" ) let transactions = TransactionsObject( UserInitiatedTransactions: [testTransaction], UserReceivedTransactions: nil )
步骤3:安全访问数组内容
因为两个交易数组是可选类型(带?),直接访问会有崩溃风险,推荐用以下几种方式处理:
方式一:if let 可选绑定(最常用)
// 访问用户发起的交易 if let initiatedTransactions = transactions.UserInitiatedTransactions { // 这里initiatedTransactions是非可选的数组,可直接遍历 for tx in initiatedTransactions { print("发起的交易ID:\(tx.transactionId)") print("交易金额:\(tx.amount)") if let sender = tx.sender { print("付款方:\(sender)") } } } else { print("没有用户发起的交易记录") } // 同理访问用户收到的交易 if let receivedTransactions = transactions.UserReceivedTransactions { for tx in receivedTransactions { print("收到的交易ID:\(tx.transactionId)") print("收款金额:\(tx.amount)") } }
方式二:guard let 提前退出(适合函数内使用)
如果在函数里处理,用guard let可以让逻辑更清晰:
func printReceivedTransactions(from obj: TransactionsObject) { guard let receivedTx = obj.UserReceivedTransactions else { print("无收款交易记录") return } for tx in receivedTx { print("收款交易ID:\(tx.transactionId),金额:\(tx.amount)") } } printReceivedTransactions(from: transactions)
方式三:空合运算符(默认空数组)
如果想直接用空数组作为默认值,避免可选判断,可以用??:
let allInitiatedTx = transactions.UserInitiatedTransactions ?? [] for tx in allInitiatedTx { print(tx.transactionId) }
内容的提问来源于stack exchange,提问作者Erent
相关产品推荐
相关产品推荐

