Условный рендеринг с опциями в SwiftUI - PullRequest
1 голос
/ 15 июня 2019

Исходя из фона React, легко отобразить представление, только если определено значение.Это выглядит так:

function Component ({ profile }) {
  return (
    <div>{profile && <div>{profile.name}}</div>
  )
}

Но я считаю, что этот шаблон гораздо сложнее скопировать в SwiftUI.В идеале мы могли бы использовать условное развертывание в наших представлениях, но в настоящее время это не работает.Единственное решение, которое мне удалось выяснить, действительно не элегантное:

struct ProfileView : View {
    var profile: Profile?

    var body : some View {
        if let profile = profile {
            return Text("profile: \(profile.bio)")
        }  else {
            return Text("")
        }
    }
}

struct LayoutView : View {
    @State var profile: Profile?
    var body : some View {
        Group {
            ProfileView(profile: profile)
        }
    }.onAppear(perform: fetch)

    // fetch method 
}

Есть ли у кого-нибудь лучшие стратегии условного рендеринга с использованием необязательных значений?

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Вы можете пойти другим путем, используя map, чтобы позаботиться о необязательном элементе, например:

struct ProfileView : View {
    var profile: Profile?

    var body : some View {
        profile.map { Text("profile: \($0.bio)") }
    }
}

($0 - это развернутый profile в этом примере.)

Если вам нужен другой случай:

profile.map { Text($0.bio) } ?? Text("Not available")
0 голосов
/ 15 июня 2019

Просто сделайте это:

struct LayoutView : View {
    @State var profile: Profile?
    var body : some View {
        Group {
            if profile != nil {
                ProfileView(profile: profile!)
            }
        }
    }.onAppear(perform: fetch)

    // fetch method 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...