Я пытаюсь воссоздать UIKit ниже в SwiftUI, используя ForEach
func configureCell(for post: MediaPost, in tableview: UITableView) -> UITableViewCell {
if let post = post as? TextPost {
let cell = tableview.dequeueReusableCell(withIdentifier: CellType.text) as! TextPostCell
return cell
} else{
guard let post = post as? ImagePost else { fatalError("Unknown Cell") }
return cell
}
}
Вот моя модель
protocol PostAble {
var id:UUID { get }
}
struct MediaPost: PostAble,Identifiable {
let id = UUID()
let textBody: String?
let userName: String
let timestamp: Date
let uiImage: UIImage?
}
struct RetweetMediaPost: PostAble,Identifiable {
let id = UUID()
let userName: String
let timestamp: Date
let post: MediaPost
}
Итак, я создал массив в ViewModel
class PostViewModel: ObservableObject {
@Published var posts: [PostAble] = []
}
, и я хотел бы повторить этот массив с помощью ForEach и создать список представлений. Вот код, который я написал
struct PostListView: View {
@ObservedObject var postViewModel = PostViewModel()
var body: some View {
List {
ForEach(postViewModel.posts, id: \.id) { post in
if let post = post as? MediaPost {
PostView(post: post)
} else {
guard let post = post as Retweet else { fatalError("Unknown Type") }
RetweetView(post: post)
}
}
}
}
}
, который дает мне эту ошибку
Тип '()' не может соответствовать 'View'; только типы struct / enum / class могут соответствовать протоколам
Я понимаю ошибку и знаю, почему она не работает, но у меня нет другого решения для перезаписи. Можно ли этого добиться с помощью swiftUI?