2017-09-22 84 views
1

我是一名初学者(学生)程序员,目前正在构建一个课程目录式的应用程序,我可以查看我学校内某些专业所需的课程。在iOS中存储/加载本地数据的最佳方式是什么?

目前,我做了一个独立的data.swift文件,将所有数据存储为全局数据并制作了一堆huuuuge数组。在主tableview中,我只是从我的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告诉我“表达太复杂,无法在合理的时间内解决;考虑将表达式分解成不同的子表达式”在我的数组上=(我只是不知道其他方式=(

我已经实际上搜索了一下,发现有些人推荐plist,一些ppl说sqlite,json,xml等等。

对于存储和加载BIG本地数据,什么是最好/最有效和最快的方法?

谢谢!

+0

我会添加一些关于如何加载数据的代码以及您对数据的处理方式,以便我们可以协助您选择最佳的体系结构。 – AlexKoren

+1

JSON是很好的简单格式,可能是阻力最小的方法。您可以在文本编辑器中轻松编辑文件。如果您选择从Web服务获取数据而不是将其构建到您的应用中,它还提供了一个很好的优雅转换路径。你没有提到的一个技术是CoreData,苹果公司对这类本地持久性商店的首选技术,但如果你是新手开发人员,这可能会有点让人费解。根据提供的有限信息,我倾向于JSON。 – Rob

+0

@AlexKorean,增加了一些代码! –

回答

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" 
    } 
] 

在斯威夫特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) 

然后你结束了课程的单个阵列拥有独立teacherscourseNames阵列的优势。例如,如果您想按课程名称对课程进行排序,它会确保课程名称和教师名称一起排序。现在,我知道你的结构比这更复杂,所以你的JSON也可能变得更加复杂,但我只想说明(a)自定义对象的想法;和(b)使用Swift 4的新Codable协议和JSONDecoder来解析该JSON。

+0

哇,太棒了! ! 非常感谢你!! –

0

您可以使用UserDefaults类。它很简单,很容易访问。阅读有关您可以检索值的所有不同方式的文档。

保存数据:

let defaults = UserDefaults.standard 
defaults.set("Dewan Payroda", forKey: "Name") 

检索数据:

let data = defaults.object(forKey: "Name") 
print(data) 
相关问题