我尝试使用新的Swift宏,使用@Observable和@Environment,代码如下:
import SwiftUI
import Observation
@Observable class Note {
var text = ""
}
struct ContentView: View {
@State var note = Note()
var body: some View {
FormView()
.environment(note)
}
}
struct FormView: View {
@Environment(Note.self) var note
var body: some View {
Form {
TextField("write here", text: $note.text)
}
}
}
但是,它无法生成,并出现以下错误:Cannot find '$note' in scope
删除$note
中的$
会导致:Cannot convert value of type 'String' to expected argument type 'Binding<String>'
1条答案
按热度按时间cgvd09ve1#
目前(从iOS 17/macOS 15 beta 2开始),通过@Environment对象接收的对象不能直接绑定。
解决方法(如苹果工程师在WWDC slack room中所建议的)是在
body
中重新声明一个可绑定的本地引用:如果您对此感到沮丧,请向Apple提交反馈报告-我们向他们提供的有关此类元素的反馈越多,修复的优先级可能就越高。