Saya membangun aplikasi menggunakan SwiftUI dan ingin cara untuk mengonversi Binding<Value?>
menjadi Binding<Value
>.
Di aplikasi saya, saya punya AvatarView
yang tahu cara membuat gambar untuk pengguna tertentu.
struct AvatarView: View {
@Binding var userData: UserData
...
}
Aplikasi saya memiliki ContentView
yang memiliki dua binding: kamus pengguna berdasarkan id, dan id pengguna yang avatarnya harus kita tunjukkan.
struct ContentView: View {
@State var userById: Dictionary<Int, UserData>
@State var activeUserId: Int
var body: some View {
AvatarView(userData: $userById[activeUserId])
}
}
Masalah: kode di atas tidak bergabung karena $userById[activeUserId]
bertipe Binding<UserData?>
dan AvatarView
mengambil a Binding<UserData>
.
Hal yang saya coba ...
$userById[activeUserId]!
tidak berfungsi karena sedang mencoba membukaBinding<UserData?>
. Anda hanya dapat membukaOptional
, bukanBinding<Optional>
.$(userById[activeUserId]!)
tidak berfungsi karena alasan yang belum saya pahami, tetapi saya pikir sesuatu tentang$
diselesaikan pada waktu kompilasi sehingga Anda sepertinya tidak bisa mengawali ekspresi sewenang-wenang dengannya$
.
$userById[activeUserId] as! Binding<UserData>
?Jawaban:
Anda dapat menggunakan penginisialisasi ini , yang tampaknya menangani kasus persis ini - mengonversi
Binding<T?>
keBinding<T>?
:Saya sudah terbiasa
!
memaksa membuka, seperti dalam upaya Anda, tetapi Anda bisa membuka yangnil
diinginkan. EkspresiBinding($userById[activeUserId])
adalah tipeBinding<UserData>?
.sumber