【发布时间】:2022-01-13 23:12:27
【问题描述】:
我需要 SwiftUI 方面的帮助。
我在下面有一个模型,它接收 JSON 数据。 当我想将其初始化为一个空数组时,应该很简单,只是说明Answers,但是我怎样才能将它初始化为一个空数组而不是一个空的单个数据集。
struct Answers: Identifiable, Decodable {
let id: Int
let questionsUsersId: Int
let reactions: [Reactions]
enum CodingKeys: String, CodingKey {
case id = "questions_id"
case questionsUsersId = "questions_users_id"
case reactions = "reactions"
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.id = try container.decodeIfPresent(Int.self, forKey: .id) ?? 0
self.questionsUsersId = try container.decodeIfPresent(Int.self, forKey: .questionsUsersId) ?? 0
self.reactions = try container.decodeIfPresent([Reactions].self, forKey: .reactions) ?? [Reactions]()
}
}
我试过 var answer: Answers = Answers( ) 但得到以下错误:
//Missing argument for parameter 'from' in call
//Insert 'from: <#Decoder#>'
之所以要将它初始化为空,是因为当数据模型为nil时,我需要交出它的默认值。 (即xxx应该写什么?)
@ObservedObject var receiveAnswersViewModel = ReceiveAnswersViewModel()
//abbreviate
NavigationLink(destination: AnswerDetailView(answer: receiveAnswersViewModel.answer ?? xxx), isActive: $shouldNavigate) {
ForEach(myPageViewModel.answers(forFilter: selectedFilter)?.answers ?? [Answers]()) { answer in
AnswerCell(answer: answer)
.gesture(TapGesture()
.onEnded({ _ in
//your action here
self.answersId = answer.answersId
receiveAnswersViewModel.fetchAnswers(answers_id: answersId ?? 0)
}))
}
}
这就是我在上面尝试做的事情:使用 NavigationLink 显示多个单元格。 (假设单元格是推文。)按下列表中的一条推文→在视图模型中调用 fetchAnswers 函数,该模型将按下的推文 id 作为参数→返回特定的推文详细信息→将其放入答案模型中→手转到视图 → 导航到推文详细信息视图。
查看模型代码如下:
class ReceiveAnswersViewModel: ObservableObject {
@Published var answer: Answers?
func fetchAnswers(answers_id: Int){
//abbreviate
self.answer = try JSONDecoder().decode(Answers.self, from: data)
}
提前致谢。
【问题讨论】:
-
对不起,我的意思是写“当我想将它初始化为一个空数组时,应该很简单,只是在开头写[Answers]()”。
标签: arrays swift swiftui swiftui-navigationlink swift-structs