Код: Выделить всё
struct MyToastView: View {
@ViewBuilder let content: Content
@Binding var isPresented: Bool
var body: some View {
if isPresented {
VStack(alignment: .leading) {
content
}
.padding()
.background {
Rectangle()
.fill(.blue)
}
.transition(.opacity)
}
}
}
// This is very sloppy. It's just for MRE.
extension View {
func myToast(isPresented: Binding, @ViewBuilder content: () -> T) -> some View {
overlay {
MyToastView(content: content, isPresented: isPresented)
}
}
}
< /code>
Когда я называю эту функцию, я должен назвать ее так, если мне нужно ее отклонить: < /p>
.myToast(isPresented: $isPresented) {
ToastContents(isPresented: $isPresented)
}
Код: Выделить всё
struct ToastContents: View {
@Environment(\.dismiss) var dismiss
var body: some View {
// ...
Button("close") {
dismiss()
}
}
}
< /code>
Когда я попытался это сделать, это дало мне ошибку по поводу того, что он не подходит для написания: < /p>
.enviroment(\.dismiss, .init()) // 🛑 Cannot convert value of type 'KeyPath' to expected argument type 'WritableKeyPath'
Подробнее здесь: https://stackoverflow.com/questions/797 ... missaction
Мобильная версия