Я будую додаток, використовуючи SwiftUI, і я хотів би спосіб перетворити a Binding<Value?>
в a 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>
?