Tworzę aplikację za pomocą SwiftUI i chciałbym sposób przekonwertować Binding<Value?>na Binding<Value>.
W mojej aplikacji mam taki, AvatarViewktóry wie, jak renderować obraz dla konkretnego użytkownika.
struct AvatarView: View {
@Binding var userData: UserData
...
}
Moja aplikacja zawiera ContentViewdwa powiązania: słownik użytkowników według identyfikatora i identyfikator użytkownika, którego awatar powinniśmy wyświetlać.
struct ContentView: View {
@State var userById: Dictionary<Int, UserData>
@State var activeUserId: Int
var body: some View {
AvatarView(userData: $userById[activeUserId])
}
}
Problem: powyższy kod nie łączy się, ponieważ $userById[activeUserId]jest typu Binding<UserData?>i AvatarViewprzyjmuje Binding<UserData>.
Rzeczy, których próbowałem ...
$userById[activeUserId]!nie działa, ponieważ próbuje rozpakować plikBinding<UserData?>. Możesz tylko rozpakowaćOptional, a nieBinding<Optional>.$(userById[activeUserId]!)nie działa z powodów, których jeszcze nie rozumiem, ale myślę, że coś$zostało rozwiązane w czasie kompilacji, więc nie możesz poprzedzać dowolnych wyrażeń$.
$userById[activeUserId] as! Binding<UserData>?