我正在做一个带有一些数据的小SwiftUI项目,由我自己的本地网络托管。
当视图出现时,我调用返回问题对象数组的QuestionApiCall().getAllQuestions
方法。到目前为止一切顺利。在返回数组中的每个问题对象中,都有一个名为senderId的变量。这个变量对于调用另一个方法UserByApiCall(id: senderId).getUserById
来获取提出问题的用户的名称是必需的。
我的想法是:
ScrollView(showsIndicators: false) {
VStack {
ForEach(questions) {question in
QuestionView(name: ?, content: question.content, creationTime: question.creation)
}
}
}
.onAppear() {
QuestionApiCall().getAllQuestions { (questions) in
self.questions = questions
}
显示问题正常工作,但我不知道如何显示他们的名字,这只能在调用UserByApiCall(id: senderId).getUserById
时显示,每次它循环抛出具有特定senderId的问题数组。
理论上,我需要在每次问题在ForEach-Loop中循环时执行UserByApiCall(id: senderId).getUserById
,question.senderId
用于获取每个问题的用户对象以显示其名称。
我真的不知道怎么做,也不知道在哪里打电话。我不能只编辑Api和它们的方法,因为这是我实习时的练习。
如果您真的不能更改API,请将调用名称API的责任转移到您的QuestionView
。
由于你没有包括你的QuestionView
,我需要对它做一些假设。
你的name
变量应该是这样的:
@State private var name: String = ""
在QuestionView
的.onApear
中添加调用名称的函数:
.onApear{
if name == ""{
UserByApiCall(id: senderId).getUserById{[weak self] name in
self?.name = name
}
}
}
最后将VStack
改为LazyVStack
:
LazyVStack {
ForEach(questions) {question in
QuestionView(name: ?, content: question.content, creationTime: question.creation)
}
}
LazyVstack
将确保不是所有的元素都被一次加载。