Swift:我想阅读来自CSV文件中许多属性的国家列表,并将其用于我的应用程序.我该如何实施



我正在使用Swift(仍然是Swift的新手)开发iOS应用程序。

我的数据库保存为CSV文件,这主要是应用程序的核心。数据库包含一个分为所有国家(行)列表的表,每个表(行)都有许多属性/描述符(列)。国家之间没有关系。

我想做的是能够在我的应用程序中为(选定的)国家/地区显示此信息。以及其他基于属性/属性的搜索/过滤/排序等其他事情。

将来可能会随着应用更新发布数据库,但除此之外,我认为我希望从CSV文件中读取一次,然后该应用程序使用该数据。

我是否正确地认为实现此目的的最佳方法是将核心数据与具有不同属性的一个实体(国家/地区)一起使用?因此,我要做的就是读取一次CSV文件,然后持续存储所有数据并从那里使用它。

还是核心数据不是最佳实现?我可以创建一个具有许多属性的阶级国家并使用吗?但是,这意味着该应用程序每次打开时都必须读取CSV并将数据保存到数组等,如果我想过滤或排序?

所以我想总结我的问题是:1.是否使用核心数据?如果不是这样,您认为最好的实施是什么?2.如果使用核心数据,我只是创建一个实体(所以没有关系等)。

您想将其加载到选择的数据库中。因此, coredata sqlite ,甚至 ronem 将有效。

如果您还没有任何数据可用的数据,并且您想将它们加载到Swift中,这是我在类似情况下编写的解析器,因为CSV是我的原始数据,我需要解析:

if let listFile = try? String(contentsOfFile: path) {
                let lines = listFile.components(separatedBy: "n")
                // NOTE: There is also a CSV format that uses ',' as a separator
                // So verify if yours uses ';' or ','
                let rows: [[String: String]] = lines.flatMap() {
                    (item) -> [String: String]? in
                    let components = item.components(separatedBy: ";")
                    if components.count != 3 {
                        return nil
                    }
                    // Modify this part to parse the X amount of columns
                    // you have in your countries.csv
                    let dict = [
                        "identity":    components[0],
                        "description": components[1].lowercased(),
                        "points":      components[2]
                    ]
                    return dict
                }
            }
}

然后,在以[[String: String]]格式使用数据后,您可以行分析该数据并将其插入您选择使用的数据库中。

我相信 swift4 应该可以使用新的Codable协议来实现看起来更清洁的结果;但是我尚未为CSV文件编写编码器/解码器,这将使您能够执行此操作。如果有一个可用,我会在这里发布。

github上还有一个CSV解析器:swiftcsv我从来没有使用过,但是谁知道;可能对您有帮助。

最新更新