SwiftUI:JSON 索引总是超出范围
Posted
技术标签:
【中文标题】SwiftUI:JSON 索引总是超出范围【英文标题】:SwiftUI: JSON index always out of range 【发布时间】:2020-04-26 09:24:41 【问题描述】:我想知道为什么我的索引总是超出范围。我正在尝试在本地解析 JSON。这是我的代码。谢谢。
文章模型
struct Article: Decodable
let title: String
let snapshot: String
解析 JSON
class TopicsViewModel: ObservableObject
@Published var articles = [Article]()
func getArticles(selectedTopic: Int)
switch selectedTopic
case 0:
self.articles = try! JSONDecoder().decode([Article].self, from: JSON.data(using: .utf8)!)
default:
articles = []
我在Appear上加载数据
.onAppear
self.topicsVM.getArticles(selectedTopic: self.whichTopic)
这是错误开始
Text(topicsVM.articles[0].title).foregroundColor(Color.black)
First image, showing Model and Parse function
Second image, showing Text
【问题讨论】:
如果self.whichTopic
不是0
你肯定会遇到这个问题?
不,在这种情况下假设 whichTopic (self.whichTopic) 始终为 0。当 I Text(String(self.articles.count)) 时,它始终返回正确的大小。但不知什么原因,我无法访问索引。就像,如果我想访问第零个项目,它总是返回索引超出排列...
那么必须发生的是getArticles
在数据显示在列表中之前被调用。通过拥有一些@State
属性来防止这种情况,例如,称为isLoaded
来跟踪这一点。如果您想要完整的答案,请告诉我。
这是我的完整代码。你有什么主意吗?谢谢你。 pastebin.com/mM1gcbvK
【参考方案1】:
要解决您的问题,您可以在 TopicsView 中执行此操作:
init(whichTopic: Int)
self.whichTopic = whichTopic
self.topicsVM.getArticles(selectedTopic: self.whichTopic)
这将确保您的文章数组在构建视图之前具有您期望的数据。 尽管如此,你还是应该在你的列表中这样做:
if topicsVM.articles.count > 0
Text(topicsVM.articles[0].title).foregroundColor(Color.black)
索引超出范围的原因,似乎是因为在构造视图后填充了“topicsVM.articles”数组。当然,空数组没有 [0] 元素。
【讨论】:
以上是关于SwiftUI:JSON 索引总是超出范围的主要内容,如果未能解决你的问题,请参考以下文章