我一直忙着为学校项目创建一个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
答案 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的旧版本,因此可能存在一些差异......