Swiftui 刷新NavigationView环境对象
我正在尝试创建一个可编辑的环境对象,并将其放入列表中。 例如,只有当我切换选项卡(因此每当我离开NavigationView)然后返回时,变量才会刷新 这同样适用于以前的ModalView。可能是虫子吧?还是我做错了什么Swiftui 刷新NavigationView环境对象,swiftui,swiftui-list,Swiftui,Swiftui List,我正在尝试创建一个可编辑的环境对象,并将其放入列表中。 例如,只有当我切换选项卡(因此每当我离开NavigationView)然后返回时,变量才会刷新 这同样适用于以前的ModalView。可能是虫子吧?还是我做错了什么 import SwiftUI import Combine struct TestView: View { @State var showSheet: Bool = false @EnvironmentObject var feed: TestObject
import SwiftUI
import Combine
struct TestView: View {
@State var showSheet: Bool = false
@EnvironmentObject var feed: TestObject
func addObjects() {
var strings = ["one","two","three","four","five","six"]
for s in strings {
var testItem = TestItem(text: s)
self.feed.items.append(testItem)
}
}
var body: some View {
TabView {
NavigationView {
List(feed.items.indices, id:\.self) { i in
NavigationLink(destination: detailView(feed: self._feed, i: i)) {
HStack {
Text(self.feed.items[i].text)
Text("(\(self.feed.items[i].read.description))")
}
}
}
}
.tabItem({ Text("Test") })
.tag(0)
Text("Blank")
.tabItem({ Text("Test") })
.tag(0)
}.onAppear {
self.addObjects()
}
}
}
struct detailView: View {
@EnvironmentObject var feed: TestObject
var i: Int
var body: some View {
VStack {
Text(feed.items[i].text)
Text(feed.items[i].read.description)
Button(action: { self.feed.items[self.i].isRead.toggle() }) {
Text("Toggle read")
}
}
}
}
final class TestItem: ObservableObject {
init(text: String) {
self.text = text
self.isRead = false
}
static func == (lhs: TestItem, rhs: TestItem) -> Bool {
lhs.text < rhs.text
}
var text: String
var isRead: Bool
let willChange = PassthroughSubject<TestItem, Never>()
var read: Bool {
set {
self.isRead = newValue
}
get {
self.isRead
}
}
}
class TestObject: ObservableObject {
var willChange = PassthroughSubject<TestObject, Never>()
@Published var items: [TestItem] = [] {
didSet {
willChange.send(self)
}
}
}
导入快捷界面
进口联合收割机
结构测试视图:视图{
@状态变量显示表:Bool=false
@EnvironmentObject变量提要:TestObject
func addObjects(){
变量字符串=[“一”、“二”、“三”、“四”、“五”、“六”]
对于字符串中的字符串{
var testItem=testItem(文本:s)
self.feed.items.append(testItem)
}
}
var body:一些观点{
TabView{
导航视图{
列表(feed.items.index,id:\.self){i在
导航链接(目的地:详细视图(提要:self.\u提要,i:i)){
HStack{
Text(self.feed.items[i].Text)
文本(\(self.feed.items[i].read.description)))
}
}
}
}
.tabItem({Text(“Test”)})
.tag(0)
文本(“空白”)
.tabItem({Text(“Test”)})
.tag(0)
}奥纳佩尔先生{
self.addObjects()
}
}
}
结构详细视图:视图{
@EnvironmentObject变量提要:TestObject
变量i:Int
var body:一些观点{
VStack{
文本(提要.items[i].Text)
文本(feed.items[i].read.description)
按钮(操作:{self.feed.items[self.i].isRead.toggle()}){
文本(“切换读取”)
}
}
}
}
最终类测试项:ObservieObject{
初始化(文本:字符串){
self.text=文本
self.isRead=false
}
静态函数==(左:测试项,右:测试项)->Bool{
lhs.text
我想出来了。有两个解决方案(一个解决方案和一个解决方案),您是否可以与社区共享该解决方案?ObserveObject使用willSet调用objectWillChange.send()。这是由@Published处理的。willChange发布服务器似乎未使用。SwiftUI的观察系统只适用于类,IIRC不能将结构声明为ObserveObject。