Tôi đang xây dựng một ứng dụng bằng SwiftUI và muốn có cách chuyển đổi Binding<Value?>thành Binding<Value>.
Trong ứng dụng của mình, tôi có một AvatarViewcái mà biết cách kết xuất hình ảnh cho một người dùng cụ thể.
struct AvatarView: View {
@Binding var userData: UserData
...
}
Ứng dụng của tôi có một ContentViewliên kết sở hữu hai ràng buộc: từ điển người dùng theo id và id của người dùng có hình đại diện mà chúng ta sẽ hiển thị.
struct ContentView: View {
@State var userById: Dictionary<Int, UserData>
@State var activeUserId: Int
var body: some View {
AvatarView(userData: $userById[activeUserId])
}
}
Vấn đề: đoạn mã trên không kết hợp vì $userById[activeUserId]thuộc kiểu Binding<UserData?>và AvatarViewlấy trong a Binding<UserData>.
Những điều tôi đã thử ...
$userById[activeUserId]!không làm việc vì nó đang cố gắng để unwrap mộtBinding<UserData?>. Bạn chỉ có thể mở khóa mộtOptional, không phải aBinding<Optional>.$(userById[activeUserId]!)không hoạt động vì những lý do mà tôi chưa hiểu, nhưng tôi nghĩ điều gì đó$được giải quyết vào thời gian biên dịch để bạn dường như không thể thêm tiền tố vào các biểu thức tùy ý$.
$userById[activeUserId] as! Binding<UserData>chưa