Как использовать пользовательские данные из JSON в ForEach SwiftUI
У меня есть файл JSON с пользовательскими данными. Цель - использовать эти данные вPostCard()
в ForEach(){}
. Но каждый раз я пытаюсь использоватьuser
внутри я получаю эту ошибку в VStack. Невозможно определить тип возвращаемого значения сложного закрытия; добавить явный тип для устранения неоднозначности.
Моя функция конвертера JSON выглядит так:
let userResponse: [UserResponse] = load("users.json")
func load<T: Decodable>(_ filename: String, as type: T.Type = T.self) -> T {
let data: Data
guard let file = Bundle.main.url(forResource: filename, withExtension: nil)
else {
fatalError("Couldn't find \(filename) in main bundle.")
}
do {
data = try Data(contentsOf: file)
} catch {
fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
}
do {
let decoder = JSONDecoder()
return try decoder.decode(T.self, from: data)
} catch {
fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)")
}
}
Пользовательские типы данных:
struct UserResponse: Hashable, Codable, Identifiable {
public var id: Int
public var username: String
public var avatar: String
public var postOne: String
public var postTwo: String
public var postThree: String
public var postFour: String
public var story: String
public var likes: Int
public var commentNumber: Int
public var location: String
public var comment: String
public var name: String
public var followers: Int
public var following: Int
public var postNumbers: Int
public var bio: String
public var locationPic: String
}
Я инициализирую его внутри дочернего представления:
var user : UserResponse
ZStack{
VStack{
ForEach(userResponse){user in
HStack(alignment: .center, spacing: 5){
PostCard(user: user)
.padding(EdgeInsets(top: 0, leading: 5, bottom: 0, trailing: 0))
PostCard(user: user)
.padding(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 5))
}.shadow(color: Color("greySec"), radius: 3, x: 0, y: 0)
}
}.navigationBarTitle(Text(""), displayMode: .inline)
.navigationBarHidden(true)
}
Мой PostCard
структура выглядит так:
var user : UserResponse
VStack(spacing: 10){
HStack(spacing: 5){
VStack(spacing: 10){
Image(user.postOne)
.resizable().frame(height: 290)
HStack{
Text(user.comment)
.font(.system(size: 12, weight: .medium))
.padding(EdgeInsets(top: 0, leading: 5, bottom: 0, trailing: 5))
}
}
.background(Color("whiteAndBlack"))
.cornerRadius(5)
.foregroundColor(.black)
}
}
Вопрос: Есть ли кто-нибудь, кто знает, как использовать данные JSON внутриForEach(){}
? Моя цель - создать это представление с использованием различных данных JSON для каждой открытки.