在SwiftUI中,使用For-in循环遍历JSONDecoder解码的数组时,发现报错:
do {
let decoded = try decoder.decode(CryptoDTO.self, from: data)
for coin in decoded { // 报错行
print("加密外币:\(coin)")
}
print("成功解码")
} catch {
print("解码报错")
}
报错内容为:
For-in loop requires 'CryptoDTO' to conform to 'Sequence'
我以为解码的结构需要遵循Sequence协议。
后面检查代码的时候,发现因为我尝试对一个不是数组或可迭代对象的东西使用 For-in 循环。
for coin in decoded {
print("加密外币:\(coin)")
}
For-in循环中的decoded类型不是数组,而是CryptoDTO 单个对象。
因此,解决方案为:
let decoded = try JSONDecoder().decode([CryptoDTO].self, from: data)
将JSONDecoder解码为[CryptoDTO].self数组类型后,For-in循环的decoded就是数组类型,符合Sequence协议。
问题得到解决。
相关文章
Swift遍历有序集合协议Sequence:https://fangjunyu.com/2024/12/10/swift%e9%81%8d%e5%8e%86%e6%9c%89%e5%ba%8f%e9%9b%86%e5%90%88%e5%8d%8f%e8%ae%aesequence/