Je crée une application à l'aide de SwiftUI et je voudrais un moyen de convertir un Binding<Value?>
enBinding<Value
>.
Dans mon application, j'ai un AvatarView
qui sait rendre une image pour un utilisateur particulier.
struct AvatarView: View {
@Binding var userData: UserData
...
}
Mon application contient un ContentView
qui possède deux liaisons: un dictionnaire d'utilisateurs par identifiant et l'identifiant de l'utilisateur dont nous devrions montrer l'avatar.
struct ContentView: View {
@State var userById: Dictionary<Int, UserData>
@State var activeUserId: Int
var body: some View {
AvatarView(userData: $userById[activeUserId])
}
}
Problème: le code ci-dessus ne se combine pas car il $userById[activeUserId]
est de type Binding<UserData?>
et AvatarView
prend en a Binding<UserData>
.
Ce que j'ai essayé ...
$userById[activeUserId]!
ne fonctionne pas car il essaie de déballer un fichierBinding<UserData?>
. Vous pouvez uniquement déballer unOptional
, pas unBinding<Optional>
.$(userById[activeUserId]!)
ne fonctionne pas pour des raisons que je ne comprends pas encore, mais je pense que quelque chose$
est résolu au moment de la compilation, vous ne pouvez donc pas sembler préfixer des expressions arbitraires avec$
.
$userById[activeUserId] as! Binding<UserData>
?Réponses:
Vous pouvez utiliser cet initialiseur , qui semble gérer ce cas précis - la conversion
Binding<T?>
enBinding<T>?
:J'ai l'habitude
!
de forcer le déballage, comme dans vos tentatives, mais vous pouvez déballer commenil
vous le souhaitez. L'expressionBinding($userById[activeUserId])
est de typeBinding<UserData>?
.la source