【发布时间】:2020-02-06 09:06:45
【问题描述】:
我正在使用 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]!)不起作用的原因我还不明白,但我认为有关$的某些问题在编译时已解决,因此您似乎无法在任意表达式前面加上$.
【问题讨论】:
-
你试过
$userById[activeUserId] as! Binding<UserData>吗? -
感谢您的建议!我认为它可能会正常工作,但我不想做不安全的演员表。当我尝试它时,我收到一条构建警告,说“从 Binding
转换为不相关的类型 Binding ”