使用json数据填充表视图

时间:2016-12-07 13:33:42

标签: json swift xcode swift3 tableview

我一直忙着为学校项目创建一个Schedule应用程序,但似乎无法弄明白。这个网站上的某个人已经帮助我从我拥有的JSON链接中过滤掉了数据,但我无法真正使其工作。我想将我在控制台中获得的数据放入表视图中。我得到5天的名册信息,所以每个单元格应该有不同的信息。我已经观看了几个YouTube视频,并环顾四周,但它不是我真正需要的,或者我不理解它的工作方式。 我目前的代码:

typealias JSONDictionary = [String:Any]

let savedValue = UserDefaults.standard.string(forKey: "LoginUserID")


    let url = URL(string: "http://hpops.nl/greijdanus.php?Action=Schedule&StudentID=16049")
    let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
        if error != nil
        {
            print ("ERROR")
        }
        else
        {
            if let content = data
            {
                do {
                    if let json = try JSONSerialization.jsonObject(with:data!, options: []) as? JSONDictionary {
                        if let days = json["Days"] as? [JSONDictionary] {
                            for day in days {
                                print(day["DayName"] as! String)
                                if let lessons = day["Lessons"] as? [JSONDictionary] {
                                    for lesson in lessons {
                                        let classRoom = lesson["Classroom"] as! String
                                        let name = lesson["Name"] as! String
                                        let teacher = lesson["Teacher"] as! String
                                        print(teacher)
                                    }

                                }
                            }
                        }

                    }
                } catch {
                    print(error)
                }


            }

        }
    }
    task.resume()

所以我首先需要能够在星期一获得信息。然后我需要将一个表格单元格分成7个部分,然后将所有信息放入这些部分。 我希望有人可以帮忙,因为我真的很挣扎 提前致谢, Sybren

1 个答案:

答案 0 :(得分:0)

您正在解析数据。这很棒,但你需要一个参考,即一个对象。 (更新:查看你的数据和你的解析,你会遇到一些问题.DayName& Lesson是字典日数组中的字典。你的解析并不完整......)

TableViews在访问对象数组时效果最佳。要创建一个对象数组,您需要创建一个类(" Lessons" I' m假设?)。在课堂上,您将设置课程对象应具有的属性 - >课堂,名字,老师。这是我为一个简单项目制作的类文件。

class DailyWeather: NSObject {

var time : Double = 0.0
var summaryDescription : String = ""
var temperatureMin : Double = 0.0
var temperatureMax : Double = 0.0
var precipProbability : Double = 0.0

override init() {
     super.init()

    self.time = 0.0
    self.summaryDescription = ""
    self.temperatureMin = 0.0
    self.temperatureMax = 0.0
    self.precipProbability = 0.0

}

}

正如你所看到的,我在课堂上宣布了我需要的所有属性。我采用了一个简单的路径,并为它们提供了所有值,无论它们是空字符串还是0,如果数据类型是Int或Double。然后我初始化了它们。之后,我能够创建一个对象,并在解析JSON数据时设置它的值。

if let dailyDict = jsonDictionary["daily"] as? JSONDictionary {
                    print(dailyDict)

                    if let dataArray = dailyDict["data"] as? JSONArray {

                        print(dataArray)

                        for dataDict in dataArray {

                            let dailyWeatherData = DailyWeather()

                            if let summary = dataDict["summary"] as? String {
                                dailyWeatherData.summaryDescription = summary

                            } else {
                                print("I could not parse summary")
                            } ... <continue to parse and then append the object at the end before the loop begins again>

正如您所看到的,在我开始遍历Data数据之后,我创建了上面创建的Class I的实例

let dailyWeatherData = DailyWeather()

从那里,我可以在解析它时设置dailyWeatherData对象的属性。通过将对象放在循环中,它将每次为您创建一个新对象。

从那里开始,你需要在循环结束之前将对象附加到一个对象数组之前,在我的例子中是一个DailyWeather对象数组。

我将假设您正在ViewController中执行所有操作(这是大多数新手开始的地方),因此在ViewDidLoad()之前将对象数组放在顶部

var DailyWeatherArray = [DailyWeather]()

这将创建一个数组,该数组将保存您在解析数据时在循环中创建的所有对象。您可以通过在循环结束之前将对象附加到数组来放置这些对象。

之后,您只需从将用于填充tableview的TableViewDelegates和DataSource函数访问该数组。我会让你想出那部分内容,因为我已经给你很多东西了。

**我的代码是Swift的旧版本,因此可能存在一些差异......