Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Swift-无法将对象附加到数组_Arrays_Swift_Swiftui - Fatal编程技术网

Arrays Swift-无法将对象附加到数组

Arrays Swift-无法将对象附加到数组,arrays,swift,swiftui,Arrays,Swift,Swiftui,我已经在我的应用程序中创建了一个新视图,但可识别对象不会附加到数组中。 我真的不知道为什么它没有附加 代码如下: struct FirstSettingsIdentifiables: Identifiable { var id: UUID = UUID() var name: String var icon: String } struct SettingsView: View { @EnvironmentObject var settingI

我已经在我的应用程序中创建了一个新视图,但可识别对象不会附加到数组中。 我真的不知道为什么它没有附加

代码如下:

struct FirstSettingsIdentifiables: Identifiable {
    var id: UUID = UUID()
    
    var name: String
    var icon: String
}
struct SettingsView: View {
    
    @EnvironmentObject var settingItems: ContentModel
    
    @State var firstArr: [FirstSettingsIdentifiables] = []
    
    init() {
        createFirstList()
        print("Settings successfully initialized.")
    }
    
    var body: some View {
        
        return VStack {
            Text("Einstellungen")
                .font(.title)
            
            NavigationView {
                //Mitteilungen Liste
                List(firstArr) { x in
//                    ForEach(firstArr) { x in
    //                    VStack {
    //                        Image(systemName: x.icon)
                            Text("Das ist ein test")
    //                    }
//                    }
                }.navigationBarTitle("Mitteilungen")
            }
        }
    }
    
    func createFirstList() {
        
        let aText = "Mitteilungen"
        let aIcon = "info.circle.fill"
        let aObject = FirstSettingsIdentifiables(name: aText, icon: aIcon)
        
        firstArr.append(aObject)
        
        print(firstArr.count)
        
    }
    
    
}
问题可能出在
createFirstList()
部分。在这个函数中,对象
aoobject
充满了数据(这工作正常),但是对象不会附加到我的
firstArr
。计数总是
0


我在这里做错了什么?

您过早地更改了
firstArr
的值。不要在
init
中调用
createFirstList()
,而是将其删除,并将以下代码添加到视图主体中:

VStack {
    /* ... */
}
.onAppear(perform: createFirstList)
或者,您可以执行以下操作:

init() {
    _firstArr = State(initialValue: getFirstList())
    print(firstArr.count)
    print("Settings successfully initialized.")
}

/* ... */

func getFirstList() -> [FirstSettingsIdentifiables] {
    let aText = "Mitteilungen"
    let aIcon = "info.circle.fill"
    let aObject = FirstSettingsIdentifiables(name: aText, icon: aIcon)
    return [aObject]
}

您过早地更改了
firstArr
的值。不要在
init
中调用
createFirstList()
,而是将其删除,并将以下代码添加到视图主体中:

VStack {
    /* ... */
}
.onAppear(perform: createFirstList)
或者,您可以执行以下操作:

init() {
    _firstArr = State(initialValue: getFirstList())
    print(firstArr.count)
    print("Settings successfully initialized.")
}

/* ... */

func getFirstList() -> [FirstSettingsIdentifiables] {
    let aText = "Mitteilungen"
    let aIcon = "info.circle.fill"
    let aObject = FirstSettingsIdentifiables(name: aText, icon: aIcon)
    return [aObject]
}

它可以工作,但是如果我点击另一个视图,然后返回到这个视图,它会再次执行“createFirstList”函数。第二个方法不能使用,因为我以后要追加的对象不止一个。我添加了一个Bool变量,该变量在createFirstList执行后设置为false,然后不再执行。但我不认为这是最好的解决办法!还有别的办法吗?@yama_HD我不知道你的意思。使用布尔变量的原因是什么?检查onAppear是否已执行。因为每次我打开视图时,它都会被执行,然后我就有了所有的变量twice@yama_HD在这种情况下,不要使用
firstArr.append(aObject)
,而是使用
firstArr=[aObject]
。这应该可以解决您的问题。它会工作,但如果我单击另一个视图,然后返回到此视图,它会再次执行“createFirstList”函数。第二个方法不能使用,因为我以后要追加的对象不止一个。我添加了一个Bool变量,该变量在createFirstList执行后设置为false,然后不再执行。但我不认为这是最好的解决办法!还有别的办法吗?@yama_HD我不知道你的意思。使用布尔变量的原因是什么?检查onAppear是否已执行。因为每次我打开视图时,它都会被执行,然后我就有了所有的变量twice@yama_HD在这种情况下,不要使用
firstArr.append(aObject)
,而是使用
firstArr=[aObject]
。这会解决你的问题