如何使此Web服务的API调用迅速获取当前日期和缺席日期的数组? [英] How to make API call for this web service to fetch array of present and absent dates separately in swift?
问题描述
我以前的问题是仅使用2个当前和不存在的天数数组在FSCalendar上显示静态数据.
it was my previous question to simply display static data on FSCalendar using 2 arrays of present and absent days.
如何更改背景色的FSCalendar swift 3中的事件数组?
现在,我想以2array的格式从以下json响应中获取当前日期和缺席日期:根据我先前的问题,现在要在FSCalendar上显示.
now I want to fetch the present and absent dates from the following json response in the format of 2array named : present and absent want to display on FSCalendar according to my previous question.
如何解析相同的内容?请指导我.预先感谢.
How to parse the same?. Please guide me. Thanks in advance.
{
"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
}
以下是m用于解析的代码:
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()
}
屏幕截图
错误日志:
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 {Error Domain = kCFErrorDomainCFNetwork Code = -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不支持的网址})
2017-06-17 10:23:50.671 ezSchool[1848:24475] -[UICachedDeviceWhiteColor unsignedLongLongValue]: unrecognized selector sent to instance 0x608000059ec0 2017-06-17 10:23:50.672 ezSchool[1848:24475] Failed to set (placeholderType) user defined inspected property on (FSCalendar): -[UICachedDeviceWhiteColor unsignedLongLongValue]: unrecognized selector sent to instance 0x608000059ec0 2017-06-17 10:23:50.672 ezSchool[1848:24475] -[UICachedDeviceWhiteColor unsignedLongLongValue]: unrecognized selector sent to instance 0x608000059ec0 2017-06-17 10:23:50.672 ezSchool[1848:24475] Failed to set (firstWeekday) user defined inspected property on (FSCalendar): -[UICachedDeviceWhiteColor unsignedLongLongValue]: unrecognized selector sent to instance 0x608000059ec0 2017-06-17 10:23:50.672 ezSchool[1848:24475] -[UICachedDeviceWhiteColor doubleValue]: unrecognized selector sent to instance 0x608000059ec0 2017-06-17 10:23:50.673 ezSchool[1848:24475] Failed to set (headerHeight) user defined inspected property on (FSCalendar): -[UICachedDeviceWhiteColor doubleValue]: unrecognized selector sent to instance 0x608000059ec0 2017-06-17 10:23:50.673 ezSchool[1848:24475] -[UICachedDeviceWhiteColor doubleValue]: unrecognized selector sent to instance 0x608000059ec0 2017-06-17 10:23:50.673 ezSchool[1848:24475] Failed to set (headerTitleTextSize) user defined inspected property on (FSCalendar): -[UICachedDeviceWhiteColor doubleValue]: unrecognized selector sent to instance 0x608000059ec0 Error: Optional(Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL" UserInfo={NSUnderlyingError=0x60000005cbc0 {Error Domain=kCFErrorDomainCFNetwork Code=-1002 "(null)"}, NSErrorFailingURLStringKey=ezschoolportalapi.azurewebsites.net/api/Student/AttendanceDetails?schoolid=1&studentid=2&month=6&year=2017, NSErrorFailingURLKey=ezschoolportalapi.azurewebsites.net/api/Student/AttendanceDetails?schoolid=1&studentid=2&month=6&year=2017, NSLocalizedDescription=unsupported URL})
推荐答案
在Swift中不要使用NSDictionary
,您只需要使用DateFormatter
即可获取格式化日期.同样在Swift 3中正确的JSON
词典是[String:Any]
.
Don't use NSDictionary
in Swift, you just need to use DateFormatter
to get your formatted date. Also correct JSON
dictionary in Swift 3 is [String:Any]
.
首先在类型为presentDateArray
和absentDateArray
的类[String]
中声明两个实例属性.
First of all declare two instance property in your class of type [String]
named presentDateArray
and absentDateArray
.
var presentDateArray = [String]()
var absentDateArray = [String]()
现在以这种方式在响应完成块中初始化这两个数组.
Now initialize these two array in your response completion block this way.
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()
}
}
现在简单地在
func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, titleDefaultColorFor date: Date) -> UIColor? {
let datestring2 : String = dateFormatter1.string(from:date)
if presentDateArray.contains(datestring2) {
return UIColor.green
}
else if presentDateArray.contains(datestring2) {
return UIColor.red
}
else {
return nil
}
}
这篇关于如何使此Web服务的API调用迅速获取当前日期和缺席日期的数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!