首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@AppStorage不更新视图

@AppStorage不更新视图
EN

Stack Overflow用户
提问于 2022-04-26 08:13:29
回答 1查看 340关注 0票数 1

我有以下在Swift/Swift in中复制的例子。

预期功能:数字列表,在删除任何数字时,数字会更新和重新组织,以使它们按顺序排列。

例如:假设我们有一个列表中的数字1,2,3,4。当我们删除2号时,列表应该变成1,2,3,而不是停留在1,3,4。

问题:当@State用于保存数字数组时,代码按预期工作。但是,当@AppStorage中的数组用于保存数组时,视图似乎不更新/更改数字。

那么,为什么我不能使用@AppStorage方法,以及如何解决这个问题呢?

--我知道这段代码看上去很像,但是如果你只看注释的话,你可以忽略它。它只是一个有几个功能的身体,没什么疯狂的。

代码语言:javascript
复制
class MyObj: Codable, Identifiable {      //SIMPLE OBJECT TO HOLD A NUMBER
    init(num: Int) {
        self.num = num
    }
    
    var id: UUID = UUID()
    var num: Int
}

struct test2: View {
    
    @State var array: [MyObj] = []                             //USING THIS (@State) WORKS
    //AppStorage("array") var array: [MyObj] = []              //USING THIS (@AppStorage) DOESN’T UPDATE NUMBERS
    
    func minimizeNums() {
        for i in 0..<array.count {         //MAKES NUMBERS IN ORDER/CONSECUTIVE
            array[i].num = i
        }
    }
    
    var body: some View {
        VStack {
            Button("add number object") {
                array.append(MyObj(num: array.count))
            }
            
            List {
                ForEach(array) { obj in
                    Text(String(obj.num))
                }
                .onDelete(perform: { index in         
                    array.remove(atOffsets: index)      //REMOVES NUMBER OBJECT FROM LIST
                    minimizeNums()                //MAKES THE REMAINING OBJECT'S NUMBERS CONSECUTIVE
                })
            }
        }
    }
}

重要:--我使用了来自接受答案的扩展来将数组存储在@AppStorage中。我想这个扩展可能是造成问题的原因,但我不确定是怎么回事!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-26 10:12:04

这是失败的,因为您正在为您的模型MyObj使用一个类。在SwiftUI中使用结构有多种原因。请阅读博客条目或任何其他教程或文档。

TLDR:不要使用类,使用结构。

MyObj更改为:

代码语言:javascript
复制
struct MyObj: Codable, Identifiable {     
    init(num: Int) {
        self.num = num
    }
    
    var id: UUID = UUID()
    var num: Int
}

应该行得通。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72010525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档