swiftui - сохранить вид в переменной - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть следующее:

struct Event: Identifiable {
    let id: Int
    let name: String
    let image: String
}

let events = [
    Event(id: 0, name: "Host Tournament", image: "cup"),
    Event(id: 1, name: "Post Club Info", image: "shield"),
    Event(id: 3, name: "Share A Post", image: "write")
]

Я хочу, чтобы каждое событие могло иметь отдельный вид.

Например Event(id: 0, name: "Host Tournament", image: "cup", destinationView: PostView())

let events = [
    Event(id: 0, name: "Host Tournament", image: "cup",destinationView: PostView()),
    Event(id: 1, name: "Post Club Info", image: "shield",destinationView: ClubView()),
    Event(id: 3, name: "Share A Post", image: "write", destinationView: StoryView())
]

Так что я могу передать destinationView в мой NavigationLink, когда il oop через события. Я не уверен, какой тип PostView () должен быть определен как в моей структуре?

Это то, что я сейчас делаю:

ForEach(events) { event in
  NavigationLink(destination: //PASS VIEW HERE FROM EVENT) {
     VStack {
         Image(event.image)
          .resizable()
          .aspectRatio(contentMode: .fill)
          .frame(width: 100, height: 100)
          .padding(55)
          Text(event.name)
          .font(.system(.headline))
          .padding(.bottom,20)
         }
         .padding()
         .border(Color.black, width: 4)
         .cornerRadius(10)
       }.buttonStyle(PlainButtonStyle())
   }

Я хочу иметь возможность передавать в зависимости от вида на Событии, которое проходит через.

1 Ответ

1 голос
/ 30 апреля 2020

Это чистый дизайн, позволяющий так плотно связать модель с представлением ... но если вы хотите, технически это можно сделать следующим образом

let events = [
    Event(id: 0, name: "Host Tournament", image: "cup",
         destinationView: AnyView(PostView())),
    Event(id: 1, name: "Post Club Info", image: "shield",
         destinationView: AnyView(ClubView())),
    Event(id: 3, name: "Share A Post", image: "write", 
         destinationView: AnyView(StoryView()))
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...