我是一名初学者(学生)程序员,目前正在构建一个类似课程目录的应用程序,我可以在其中查看我校内某些专业所需的课程。
目前,我制作了一个单独的data.swift文件,将所有数据存储为全局数据并制作了一堆huuuuge数组。在主表视图中,我只是从我的data.swift文件中加载数据。
data.swift
let data1:[[[[String]]]] = [some datas]
let data2:[[[[String]]]] = [some datas]
let sectionHeaders [[String]] = [some datas]
在我的tableviewcontroller上,我通过执行
加载它们cell = data1[choice1][choice2][choice3]
...等
然而,我知道这不是应该如何完成的,至少xcode告诉我"表达太复杂,无法在合理的时间内解决;考虑将表达式分解为不同的子表达式"在我的阵列上=(,我只是不知道其他任何方式=(
我实际上用Google搜索了一下,发现有些人推荐plist,有些人说sqlite,json,xml等等。
对于存储和加载BIG本地数据,什么是最好/最有效和最快的方法?
谢谢!
答案 0 :(得分:1)
我知道你的结构更复杂,但我想解决多阵列问题。考虑类似的事情:
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" } ]
在Swift 4中,你会做类似的事情:
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)
然后,您最终得到一系列课程,这些课程优于单独的teachers
和courseNames
数组。例如,如果您想按课程名称对课程进行排序,则可确保课程名称和教师姓名一起排序。
现在,我知道你的结构比这更复杂,所以你的JSON也可能变得更复杂,但我只是想说明(a)自定义对象的想法; (b)使用Swift 4的新Codable
协议和JSONDecoder
来解析该JSON。
答案 1 :(得分:0)
您可以使用UserDefaults类。它简单易用。阅读有关可以检索值的所有不同方法的文档。
保存数据:
let defaults = UserDefaults.standard
defaults.set("Dewan Payroda", forKey: "Name")
检索数据:
let data = defaults.object(forKey: "Name")
print(data)