rjk*_*lan 5 ios swift swiftui combine
我正在使用SwiftUI构建应用,并希望将a转换Binding<Value?>为Binding<Value>。
在我的应用程序中,我有一个AvatarView,它知道如何为特定用户渲染图像。
struct AvatarView: View {
@Binding var userData: UserData
...
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序拥有一个ContentView拥有两个绑定的:一个ID用户字典,以及我们应显示其头像的用户ID。
struct ContentView: View {
@State var userById: Dictionary<Int, UserData>
@State var activeUserId: Int
var body: some View {
AvatarView(userData: $userById[activeUserId])
}
}
Run Code Online (Sandbox Code Playgroud)
问题:上面的代码没有合并,因为$userById[activeUserId]它是类型的,Binding<UserData?>并且AvatarView包含一个Binding<UserData>。
我尝试过的事情
$userById[activeUserId]!不起作用,因为它正在尝试打开Binding<UserData?>。您只能解开一个Optional,而不能解开一个Binding<Optional>。
$(userById[activeUserId]!)由于我尚不了解的原因而无法正常工作,但是我认为有关$问题在编译时已解决,因此您似乎无法在任意表达式前添加前缀$。
您可以使用此初始化程序,它似乎可以处理这种确切的情况-转换Binding<T?>为Binding<T>?:
var body: some View {
AvatarView(userData: Binding($userById[activeUserId])!)
}
Run Code Online (Sandbox Code Playgroud)
!就像您尝试时一样,我曾经强迫进行包装,但是您可以随意包装nil。该表达式Binding($userById[activeUserId])是类型Binding<UserData>?。
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |