【问题标题】:class initializers swift , make a vector as optional类初始化器 swift ,将向量设为可选
【发布时间】:2020-08-29 19:38:12
【问题描述】:

我正在尝试在我的应用中为用户提供将数据划分到自定义文件夹中的选项。

我创建了以下描述文件夹的模型:

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,用户在创建文件夹名称后附加该数据。

谢谢

【问题讨论】:

  • 应用崩溃时会收到什么错误信息?

标签: swift xcode class swiftui initializer


【解决方案1】:

我猜它在这里

if folder.vectorData != nil { // << check explicitly for nil
    Text("no data")
} else {
    List {
        ForEach(folder.vectorData!) { item in
            Text(item.airportData.aptICAO)
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 2023-04-02
    • 2016-04-11
    • 2015-03-04
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多