我是一名初学者(学生)程序员,目前正在构建一个类似类(class)目录的应用程序,我可以在其中查看学校内某些专业所需的类(class)。
目前,我制作了一个单独的 data.swift 文件来将所有数据存储为全局数据,并制作了一堆 huuuuge 数组。在主 TableView 中,我只是从我的 data.swift 文件加载数据。
数据.swift
let data1:[[[[String]]]] = [some datas]
let data2:[[[[String]]]] = [some datas]
let sectionHeaders [[String]] = [some datas]
在我的 tableviewcontroller 上,我通过做加载它们
cell = data1[choice1][choice2][choice3]
...等等
但是,我知道这不是应该如何完成的,至少 xcode 告诉我“表达式太复杂,无法在合理的时间内解决;考虑将表达式分解为不同的子表达式”在我的数组 =(, 我只是不知道任何其他方式 =(
我实际上用谷歌搜索了一下,发现有些人推荐 plist,有些人则推荐 sqlite、json、xml 等。
对于存储和加载 BIG 本地数据,最好/最有效和最快的方法是什么?
谢谢!!
最佳答案
我知道您的结构比较复杂,但我想解决多数组问题。考虑这样的事情:
let teachers = ["Larry Fine", "Curly Howard", "Moe Howard"]
let classNames = ["Calculus 101", "Religious Studies 102", "Teaching with Technology in Film and Media Studies 201"]
与其拥有多个数组,不如拥有一个结构,例如:
struct Course: Codable {
let teacher: String
let className: String
}
然后您可以在文本文件中的单个 JSON 结构中表示它,例如 courses.json
,如下所示:
[ { "teacher" : "Larry Fine", "className" : "Calculus 101" }, { "teacher" : "Curly Howard", "className" : "Religious Studies 102" }, { "teacher" : "Moe Howard", "className" : "Teaching with Technology in Film and Media Studies 201" } ]
In Swift 4, you'd do something like:
var courses: [Course]?
然后从您的包中加载一个 JSON 文件并填充 courses
:
let fileURL = Bundle.main.url(forResource: "courses", withExtension: "json")!
let data = try! Data(contentsOf: fileURL)
courses = try! JSONDecoder().decode([Course].self, from: data)
然后您将得到一个单一的类(class)数组,它比单独的 teachers
和 courseNames
数组更有优势。例如,如果您想按类(class)名称对类(class)进行排序,它会确保类(class)名称和教师姓名一起排序。
现在,我知道你的结构比这更复杂,所以你的 JSON 也可能变得更复杂,但我只是想说明 (a) 自定义对象的想法; (b) 使用 Swift 4 的新 Codable
协议(protocol)和 JSONDecoder
来解析该 JSON。
关于ios - 在 iOS 中存储/加载本地数据的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46370901/