2017-09-22 112 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) 
相關問題