Estoy creando una aplicación usando SwiftUI y me gustaría una forma de convertir Binding<Value?>
a a Binding<Value
>.
En mi aplicación tengo una AvatarView
que sabe cómo representar una imagen para un usuario en particular.
struct AvatarView: View {
@Binding var userData: UserData
...
}
Mi aplicación posee un ContentView
enlace que posee dos enlaces: un diccionario de usuarios por identificación y la identificación del usuario cuyo avatar deberíamos mostrar.
struct ContentView: View {
@State var userById: Dictionary<Int, UserData>
@State var activeUserId: Int
var body: some View {
AvatarView(userData: $userById[activeUserId])
}
}
Problema: el código anterior no se combina porque $userById[activeUserId]
es de tipo Binding<UserData?>
y AvatarView
abarca a Binding<UserData>
.
Cosas que probé ...
$userById[activeUserId]!
no funciona porque está tratando de desenvolver aBinding<UserData?>
. Solo puedes desenvolver unOptional
, no unBinding<Optional>
.$(userById[activeUserId]!)
no funciona por razones que aún no entiendo, pero creo que algo$
se resuelve en el momento de la compilación, por lo que parece que no puede prefijar expresiones arbitrarias con$
.
$userById[activeUserId] as! Binding<UserData>
?Respuestas:
Puede usar este inicializador , que parece manejar este caso exacto, convirtiendo
Binding<T?>
aBinding<T>?
:Solía
!
forzar el desenvolvimiento, al igual que en tus intentos, pero puedes desenvolver lonil
que quieras. La expresiónBinding($userById[activeUserId])
es de tipoBinding<UserData>?
.fuente