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]
。这会解决你的问题