class 初始值设定项 swift ,使向量成为可选
class initializers swift , make a vector as optional
我试图在我的应用程序中为用户提供将数据划分到自定义文件夹中的选项。
我创建了以下描述文件夹的模型:
class FolderModel : Identifiable , Codable{
var nameFolder : String
var vectorData : [GenAirportModel]
init(nameFolder: String, vectorData: [GenAirportModel] ) {
self.nameFolder = nameFolder
self.vectorData = vectorData
}
}
通过文本字段使用以下功能我添加了新文件夹
func newFolder(name: String) {
let newFolder: FolderModel = FolderModel(nameFolder: name, vectorData: [basicAirport])
folderVector.append(newFolder)
salva()
}
问题是,每次用户创建新文件夹时,上面的函数都会在 vectorData 中放入一个基本机场。
不幸的是,当用户创建文件夹时尚未决定将什么放入 vectorData 我希望当用户创建新文件夹时矢量数据是可选的或为空的。
我试过这个:
class FolderModel : Identifiable , Codable{
var nameFolder : String
var vectorData : [GenAirportModel]?
init(nameFolder: String, vectorData: [GenAirportModel]? = [] ) {
self.nameFolder = nameFolder
self.vectorData = vectorData
}
}
在列出数据的视图中,我放了这个:
VStack{
if addFolder {
ADDFolder(fm: self.fm, isDiplayed: $addFolder)
}
NavigationView{
List {
ForEach(self.fm.folderVector) { folder in
NavigationLink(destination:
VStack{
if folder.vectorData!.isEmpty {
Text("no data")
} else {
List {
ForEach(folder.vectorData!) { item in
Text(item.airportData.aptICAO)
}
}
}
//
}
) {
HStack{
Image(systemName: "folder")
Text(folder.nameFolder)
}
}
}
}.navigationBarTitle(Text("Folder List"), displayMode: .large)
.navigationBarItems(trailing:
Button(action: {
self.addFolder.toggle()
}, label: {
Image(systemName: "plus")
})
)
}
}
但是当我尝试列出时,应用程序崩溃了,因为它发现了空向量。
如何创建可选的 vectorData,用户在创建文件夹名称后附加该数据。
谢谢
我猜是这里
if folder.vectorData != nil { // << check explicitly for nil
Text("no data")
} else {
List {
ForEach(folder.vectorData!) { item in
Text(item.airportData.aptICAO)
}
}
}
我试图在我的应用程序中为用户提供将数据划分到自定义文件夹中的选项。
我创建了以下描述文件夹的模型:
class FolderModel : Identifiable , Codable{
var nameFolder : String
var vectorData : [GenAirportModel]
init(nameFolder: String, vectorData: [GenAirportModel] ) {
self.nameFolder = nameFolder
self.vectorData = vectorData
}
}
通过文本字段使用以下功能我添加了新文件夹
func newFolder(name: String) {
let newFolder: FolderModel = FolderModel(nameFolder: name, vectorData: [basicAirport])
folderVector.append(newFolder)
salva()
}
问题是,每次用户创建新文件夹时,上面的函数都会在 vectorData 中放入一个基本机场。
不幸的是,当用户创建文件夹时尚未决定将什么放入 vectorData 我希望当用户创建新文件夹时矢量数据是可选的或为空的。
我试过这个:
class FolderModel : Identifiable , Codable{
var nameFolder : String
var vectorData : [GenAirportModel]?
init(nameFolder: String, vectorData: [GenAirportModel]? = [] ) {
self.nameFolder = nameFolder
self.vectorData = vectorData
}
}
在列出数据的视图中,我放了这个:
VStack{
if addFolder {
ADDFolder(fm: self.fm, isDiplayed: $addFolder)
}
NavigationView{
List {
ForEach(self.fm.folderVector) { folder in
NavigationLink(destination:
VStack{
if folder.vectorData!.isEmpty {
Text("no data")
} else {
List {
ForEach(folder.vectorData!) { item in
Text(item.airportData.aptICAO)
}
}
}
//
}
) {
HStack{
Image(systemName: "folder")
Text(folder.nameFolder)
}
}
}
}.navigationBarTitle(Text("Folder List"), displayMode: .large)
.navigationBarItems(trailing:
Button(action: {
self.addFolder.toggle()
}, label: {
Image(systemName: "plus")
})
)
}
}
但是当我尝试列出时,应用程序崩溃了,因为它发现了空向量。
如何创建可选的 vectorData,用户在创建文件夹名称后附加该数据。
谢谢
我猜是这里
if folder.vectorData != nil { // << check explicitly for nil
Text("no data")
} else {
List {
ForEach(folder.vectorData!) { item in
Text(item.airportData.aptICAO)
}
}
}