如何对此Web服务进行API调用以在swift中单独获取当前和缺席日期的数组?

时间:2017-06-16 11:55:07

标签: json swift3 fscalendar

这是我之前的问题,只需使用现有和缺席天数的2个阵列在FSCalendar上显示静态数据。

How to change background color of events array in FSCalendar swift 3?

现在我想以2array的格式从以下json响应中获取当前和不存在的日期命名:present和absent想要根据我之前的问题在FSCalendar上显示。

如何解析相同的?请指导我。提前谢谢。

{
  "Present": [
  {
  "Student_ID": 2,
  "LeaveLetterApplied": null,
  "Message": null,
  "Date": "2017-06-04T00:00:00",
  "Notify": null,
  "Status": "Present"
 },
 {
  "Student_ID": 2,
  "LeaveLetterApplied": null,
  "Message": null,
  "Date": "2017-06-05T00:00:00",
  "Notify": null,
  "Status": "Present"
}],
  "Absent": [
   {
     "Student_ID": 2,
     "LeaveLetterApplied": "",
     "Message": "",
     "Date": "2017-06-01T00:00:00",
     "Notify": null,
     "Status": "Absent"
   },
   {
     "Student_ID": 2,
     "LeaveLetterApplied": "",
     "Message": "",
     "Date": "2017-06-02T00:00:00",
     "Notify": null,
     "Status": "Absent"
   },
  {
     "Student_ID": 2,
     "LeaveLetterApplied": "",
     "Message": "",
     "Date": "2017-06-03T00:00:00",
     "Notify": null,
     "Status": "Absent"
  },
  {
    "Student_ID": 2,
    "LeaveLetterApplied": "Applied",
    "Message": "Sick Leave",
    "Date": "2017-06-06T00:00:00",
    "Notify": null,
    "Status": "Absent"
 }
],
   "No_Of_Working_Days": 6,
   "No_Of_Present_Days": 2,
   "Percentage": 0
 }

以下是用于解析的代码:

func getdateFromJSON()
{
    let url = NSURL(string: "http://ezschoolportalapi.azurewebsites.net/api/Student/AttendanceDetails?schoolid=1&studentid=1&month=1&year=2017")
    let request = NSMutableURLRequest(url: url! as URL)
    let task = URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error)
        in
        guard error == nil && data != nil else
        {
            print("Error:",error)
            return
        }
        let httpstatus = response as? HTTPURLResponse
        if httpstatus?.statusCode == 200
        {
            if data?.count != 0
            {
                let responseString = try! JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! NSDictionary
                let presentdetails = responseString["Present"] as? [[String:AnyObject]]
                let absentdetails = responseString["Absent"] as? [[String:AnyObject]]
                print(absentdetails)
                print(presentdetails)
               // dont know what to do next :(

                }

            else
            {
                print("No data got from URL")
            }
        }
        else{
            print("error httpstatus code is :",httpstatus?.statusCode)
        }

    }
    task.resume()

}

屏幕截图Appearance

错误日志:

2017-06-17 10:23:50.671 ezSchool [1848:24475] - [UICachedDeviceWhiteColor unsignedLongLongValue]:无法识别的选择器发送到实例0x608000059ec0 2017-06-17 10:23:50.672 ezSchool [1848:24475]无法在(FSCalendar)上设置(placeholderType)用户定义的检查属性: - [UICachedDeviceWhiteColor unsignedLongLongValue]:发送到实例0x608000059ec0的无法识别的选择器 2017-06-17 10:23:50.672 ezSchool [1848:24475] - [UICachedDeviceWhiteColor unsignedLongLongValue]:无法识别的选择器发送到实例0x608000059ec0 2017-06-17 10:23:50.672 ezSchool [1848:24475]无法在(FSCalendar)上设置(firstWeekday)用户定义的检查属性: - [UICachedDeviceWhiteColor unsignedLongLongValue]:发送到实例0x608000059ec0的无法识别的选择器 2017-06-17 10:23:50.672 ezSchool [1848:24475] - [UICachedDeviceWhiteColor doubleValue]:无法识别的选择器发送到实例0x608000059ec0 2017-06-17 10:23:50.673 ezSchool [1848:24475]无法在(FSCalendar)上设置(headerHeight)用户定义的检查属性: - [UICachedDeviceWhiteColor doubleValue]:发送到实例0x608000059ec0的无法识别的选择器 2017-06-17 10:23:50.673 ezSchool [1848:24475] - [UICachedDeviceWhiteColor doubleValue]:无法识别的选择器发送到实例0x608000059ec0 2017-06-17 10:23:50.673 ezSchool [1848:24475]无法在(FSCalendar)上设置(headerTitleTextSize)用户定义的检查属性: - [UICachedDeviceWhiteColor doubleValue]:发送到实例0x608000059ec0的无法识别的选择器 错误:可选(错误域= NSURLErrorDomain代码= -1002“不支持的URL”UserInfo = {NSUnderlyingError = 0x60000005cbc0 {错误域= kCFErrorDomainCFNetwork代码= -1002“(null)”},NSErrorFailingURLStringKey = ezschoolportalapi.azurewebsites.net / api / Student /出勤详细信息?schoolid = 1& studentid = 2& month = 6& year = 2017,NSErrorFailingURLKey = ezschoolportalapi.azurewebsites.net / api / Student / AttendanceDetails?schoolid = 1& studentid = 2& month = 6& year = 2017,NSLocalizedDescription =不支持的网址})

1 个答案:

答案 0 :(得分:0)

请勿在Swift中使用NSDictionary,只需使用DateFormatter即可获取格式化日期。同样,Swift 3中的JSON字典也是[String:Any]

首先在名为[String]presentDateArray的{​​{1}}类中声明两个实例属性。

absentDateArray

现在以这种方式在响应完成块中初始化这两个数组。

var presentDateArray = [String]()
var absentDateArray = [String]()

现在只需在

方法的委托中使用这两个数组
if let responseJSON = (try? JSONSerialization.jsonObject(with: data!, options: .allowFragments)) as? [String:Any],
    let presentdetails = responseJSON["Present"] as? [[String:Any]],
    let Absentdetails = responseJSON["Absent"] as? [[String:Any]] {

     let dateFormatter = DateFormatter() 
     dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
     self.presentDateArray = presentdetails.flatMap { dateFormatter.date(for: $0["Date"] as! String) }.flatMap { dateFormatter1.string(from:$0) }
     self.absentDateArray = Absentdetails.flatMap { dateFormatter.date(for: $0["Date"] as! String) }.flatMap { dateFormatter1.string(from:$0) }
     DispatchQueue.main.async {
         calendar.reloadData()
     }
}