Ios 如何使用Alamofire和SwiftyJSON正确创建一个类来保存JSON中的数据
我正试图创建一个类来保存来自以JSON形式发送的webservice的数据。下面是我从服务器返回的JSON:Ios 如何使用Alamofire和SwiftyJSON正确创建一个类来保存JSON中的数据,ios,json,swift,alamofire,swifty-json,Ios,Json,Swift,Alamofire,Swifty Json,我正试图创建一个类来保存来自以JSON形式发送的webservice的数据。下面是我从服务器返回的JSON: [ { "weekSchedule":[ { "weekDay":"sunday", "listening":[ { "textName":"Programa de teste 1", "textPresenter":"Apresentado
[
{
"weekSchedule":[
{
"weekDay":"sunday",
"listening":[
{
"textName":"Programa de teste 1",
"textPresenter":"Apresentador",
"timeStartHour":"08:00:00",
"timeEndHour":"23:59:00",
"textDescription":"Descri\u00e7\u00e3o do programa ",
"textGuest":"Dr. Lair Ribeiro",
"urlImage":"file:\/\/servidor\/lampp\/webservice\/img\/happy.png"
},
{
"textName":"Teste 2",
"textPresenter":"Teste",
"timeStartHour":"00:00:00",
"timeEndHour":"00:00:00",
"textDescription":"",
"textGuest":"",
"urlImage":"file:\/\/servidor\/lampp\/webservice\/img\/happy.png"
}
]
},
{
"weekDay":"monday",
"listening":[
{
"textName":"Programa de teste 1",
"textPresenter":"Apresentador",
"timeStartHour":"08:00:00",
"timeEndHour":"23:59:00",
"textDescription":"Descri\u00e7\u00e3o do programa ",
"textGuest":"Dr. Lair Ribeiro",
"urlImage":"file:\/\/servidor\/lampp\/webservice\/img\/happy.png"
},
{
"textName":"Programa teste marco",
"textPresenter":"Marco",
"timeStartHour":"08:30:00",
"timeEndHour":"09:30:00",
"textDescription":"Apenas um programa para testar o json",
"textGuest":"Jason",
"urlImage":"file:\/\/servidor-ubuntu\/lampp\/webservice\/img\/happy.png"
}
]
}
]
}
]
下面是我正在创建的模型类(这里需要帮助!)
Alamofire函数发出http请求:
func getWeeklyShedule(completionHandler: (Result<ScheduleArray, NSError>) -> Void) {
alamofireManager.request(RCAppRouter.GetSchedule()).responseObject {
(response: Response<ScheduleArray, NSError>) in
guard response.result.isSuccess else {
print("Error fetching schedule: \(response.result.error!)")
return
}
completionHandler(response.result)
}
}
这就是我陷入困境的地方,我如何循环通过对象将列表中的数据存储到我的Show数组中
任何关于如何重构我的代码以实现的技巧,预期的结果是一周中的每一天都有一个分段控件,当按下时,我将使用它作为过滤器来显示适当的信息
谢谢 这可能不是最漂亮的方式,但会奏效的
if let responseArray = response as? NSArray {
for i in 0..<responseArray.count {
let showDic = responseArray[i] as! NSDictionary
let dayOfWeek = showDic["weekday"] as! String
let showArray = showDic["listening"] as! NSArray
switch dayOfWeek {
case "sunday":
addShowObjectsToArray(showArray, dailyShows: sundayArray)
case "monday":
addShowObjectsToArray(showArray, dailyShows: mondayArray)
case "tuesday":
addShowObjectsToArray(showArray, dailyShows: tuesdayArray)
case "wednseday":
addShowObjectsToArray(showArray, dailyShows: wednsedayArray)
case "thursday":
addShowObjectsToArray(showArray, dailyShows: thursdayArray)
case "friday":
addShowObjectsToArray(showArray, dailyShows: fridayArray)
case "saturday":
addShowObjectsToArray(showArray, dailyShows: saturdayArray)
default:
}
}
func addShowObjectsToArray(shows: NSArray, dailyShows: NSArray) {
for show in shows {
let showObject = Show(show)
dailyShows.append(showObject)
}
}
如果让responseArray=responseas?安萨雷{
因为我在0中通过改变三件事得到了我想要的东西:
func getWeeklyShedule(completionHandler: (Result<[ScheduleArray], NSError>) -> Void) {
alamofireManager.request(RCAppRouter.GetSchedule()).responseArray {
(response: Response<[ScheduleArray], NSError>) in
guard response.result.isSuccess else {
print("Error fetching schedule: \(response.result.error!)")
return
}
completionHandler(response.result)
}
}
func GetWeeklySchedule(completionHandler:(结果)->Void){
alamofireManager.request(RCAppRouter.GetSchedule()).responseArray{
(回应:回应)在
guard response.result.isSuccess else{
打印(“获取计划时出错:\(response.result.Error!))
返回
}
completionHandler(response.result)
}
}
(结果)(结果)
.responseObject.responseArray
(回复:回复)(回复:回复)仅供参考。使用NSURLSession编写网络代码,并自行将数据解析到适当的模型中。您不应该依靠对模型的检查和反思来为其分配变量。完全删除对Alamofire的必要依赖关系。谢谢@TheCodingArt的提示,我会尝试一下!但您能告诉我为什么我应该这样做吗I’我不会依赖Alamofire来做我的广告吗?你添加了一个依赖项作为一个轻薄的包装,没有任何真正的好处/收益/理由。这真的是一个反模式,并且会导致今后的头痛。再次感谢@TheCodingArt我会记住这一点。谢谢@brl214在摆弄了你的答案之后,我确实想出了我自己的问题。我喜欢swit的想法我想我一定会把它用在segcontrol上!@acmobile没问题!很高兴你找到了它!!
if let responseArray = response as? NSArray {
for i in 0..<responseArray.count {
let showDic = responseArray[i] as! NSDictionary
let dayOfWeek = showDic["weekday"] as! String
let showArray = showDic["listening"] as! NSArray
switch dayOfWeek {
case "sunday":
addShowObjectsToArray(showArray, dailyShows: sundayArray)
case "monday":
addShowObjectsToArray(showArray, dailyShows: mondayArray)
case "tuesday":
addShowObjectsToArray(showArray, dailyShows: tuesdayArray)
case "wednseday":
addShowObjectsToArray(showArray, dailyShows: wednsedayArray)
case "thursday":
addShowObjectsToArray(showArray, dailyShows: thursdayArray)
case "friday":
addShowObjectsToArray(showArray, dailyShows: fridayArray)
case "saturday":
addShowObjectsToArray(showArray, dailyShows: saturdayArray)
default:
}
}
func addShowObjectsToArray(shows: NSArray, dailyShows: NSArray) {
for show in shows {
let showObject = Show(show)
dailyShows.append(showObject)
}
}
func getWeeklyShedule(completionHandler: (Result<[ScheduleArray], NSError>) -> Void) {
alamofireManager.request(RCAppRouter.GetSchedule()).responseArray {
(response: Response<[ScheduleArray], NSError>) in
guard response.result.isSuccess else {
print("Error fetching schedule: \(response.result.error!)")
return
}
completionHandler(response.result)
}
}