如何在 Swift 中的绑定中解包一个可选值?
How can I unwrap an optional value inside a binding in Swift?
我正在使用 SwiftUI 构建一个应用程序,并且想要一种将 Binding<Value?>
转换为 Binding<Value
> 的方法。
在我的应用程序中,我有一个 AvatarView
知道如何为特定用户呈现图像。
struct AvatarView: View {
@Binding var userData: UserData
...
}
我的应用程序拥有一个 ContentView
,它拥有两个绑定:按 ID 列出的用户字典,以及我们应该显示其头像的用户的 ID。
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]!)
由于我还不明白的原因不起作用,但我认为关于 $
的某些事情在编译时已解决,因此您似乎看不到用 $
.
作为任意表达式的前缀
您可以使用 this initialiser,它似乎可以处理这种情况 - 将 Binding<T?>
转换为 Binding<T>?
:
var body: some View {
AvatarView(userData: Binding($userById[activeUserId])!)
}
我已经使用 !
强制解包,就像您尝试的那样,但是您可以根据需要解包 nil
。表达式 Binding($userById[activeUserId])
的类型为 Binding<UserData>?
.
我正在使用 SwiftUI 构建一个应用程序,并且想要一种将 Binding<Value?>
转换为 Binding<Value
> 的方法。
在我的应用程序中,我有一个 AvatarView
知道如何为特定用户呈现图像。
struct AvatarView: View {
@Binding var userData: UserData
...
}
我的应用程序拥有一个 ContentView
,它拥有两个绑定:按 ID 列出的用户字典,以及我们应该显示其头像的用户的 ID。
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]!)
由于我还不明白的原因不起作用,但我认为关于$
的某些事情在编译时已解决,因此您似乎看不到用$
. 作为任意表达式的前缀
您可以使用 this initialiser,它似乎可以处理这种情况 - 将 Binding<T?>
转换为 Binding<T>?
:
var body: some View {
AvatarView(userData: Binding($userById[activeUserId])!)
}
我已经使用 !
强制解包,就像您尝试的那样,但是您可以根据需要解包 nil
。表达式 Binding($userById[activeUserId])
的类型为 Binding<UserData>?
.