Я создаю приложение с использованием SwiftUI и хотел бы преобразовать a Binding<Value?>
в Binding<Value
>.
В моем приложении у меня есть, AvatarView
который знает, как визуализировать изображение для конкретного пользователя.
struct AvatarView: View {
@Binding var userData: UserData
...
}
Мое приложение содержит ContentView
две привязки: словарь пользователей по идентификатору и идентификатор пользователя, аватар которого мы должны показывать.
struct ContentView: View {
@State var userById: Dictionary<Int, UserData>
@State var activeUserId: Int
var body: some View {
AvatarView(userData: $userById[activeUserId])
}
}
Проблема: приведенный выше код не объединяется, потому что $userById[activeUserId]
имеет тип Binding<UserData?>
и AvatarView
принимает Binding<UserData>
.
Вещи, которые я пытался ...
$userById[activeUserId]!
не работает, потому что пытается развернутьBinding<UserData?>
. Вы можете только развернутьOptional
, а неBinding<Optional>
.$(userById[activeUserId]!)
не работает по причинам, которые я еще не понимаю, но я думаю, что что-то$
решается во время компиляции, поэтому вы не можете использовать префикс произвольных выражений$
.
$userById[activeUserId] as! Binding<UserData>
?Ответы:
Вы можете использовать этот инициализатор , который, кажется, обрабатывает именно этот случай - преобразование
Binding<T?>
вBinding<T>?
:Я использовал
!
принудительное развертывание, как в ваших попытках, но вы можете развернуть егоnil
так, как хотите. ВыражениеBinding($userById[activeUserId])
имеет типBinding<UserData>?
.источник