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 AvatarView
cá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 ContentView
liê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à AvatarView
lấ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