json - 没有使用 swiftyjson 和 alamofire 在 swift 4 中获取模型类数组值

标签 json swift model-view-controller alamofire swifty-json

在附加数据之前在 View Controller 中我得到了带有正确数据的 messegearray

但是,当我将消息数组数据附加到事件中时,数组数据却不可用

我得到了简单的事件名称,事件 ID,但映射到数组创建问题

我认为我在模型类中初始化 going 数组时犯了一些错误

请让我知道我在哪里做错了。我是第一次尝试使用 MVC 和 swiftyjson

这是模型课的总结

import Foundation
import  SwiftyJSON

class eventModel{

var eventId = String()
var eventName = String()
var eventUserGoing = [userGoingArray]()

init()
{}

init(json:JSON) {

    self.eventId = json["event_id"].stringValue
    self.eventName = json["event_name"].stringValue
    self.eventUserGoing = [userGoingArray(goingArrayJson:json["going_arr"])]

    print("event going model array \(self.eventUserGoing[0])")


    for i in 0..<eventUserGoing.count{

        print("user going array \(i) th data \(eventUserGoing[i])")
    }
}


}

class userGoingArray{

//var goingArray = [JSON]()
var userName = String()
var userGender = String()

init()
{}

init(goingArrayJson:JSON) {


    self.userName = goingArrayJson["name"].stringValue

    self.userGender = goingArrayJson["gender"].stringValue

}



}

Controller 类总结

1.eventModel类型的全局事件变量

var events = [eventModel]()



override func viewDidLoad() {
super.viewDidLoad()


fetchSwiftData()

}

2.这是使用带 alamofire 的 swiftyjson pods 获取 json 数据的代码

func fetchSwiftData(){

    let urlString = "http://rednwhite.co.in/webservices/event_details.php?user_id=22&club_id=1&selected_id=20"
    Alamofire.request(urlString, method: .get).validate().responseJSON { (response) -> Void in

        if let value = response.result.value{

            let json = JSON(value)


          } 

            let messageArray = json["message"].array


            for arr in messageArray!{

                    self.events.append(eventModel(json:arr ))
            }

            print("Message Array O th index data event name \(messageArray![0]["event_name"].stringValue)")

            Result:Message Array O th index data event name greeshma night

            print("user going 0th index data object \(messageArray![0]["going_arr"].arrayValue)")

上面一行的输出 enter image description here

var  goingArray = [JSON]()

goingArray = messageArray![0]["going_arr"].arrayValue
print("going array 0th index all data : \(goingArray)")

上面一行的输出

enter image description here

 print("going array 0th index data :\(goingArray[0])")

上面一行的输出 enter image description here

 print("going array 0th index user name data :\(goingArray[0]["name"])")

enter image description here

print("going array all user name :\(goingArray.map({$0["name"].stringValue}))")

以上行的输出 enter image description here

        }
    }
}

最佳答案

如果我没理解错的话,你的问题是你没有成功解析Json。 您必须将您的模型实现为这样的结构:

struct eventModel {
    var eventId = String?
    var eventName = String?
    var eventUserGoing = [userGoingModel]?

    init(){
        self.eventId = ""
        self.eventName = ""
        self.eventUserGoing = []
    }

    init(json: [String: Any]) {
        if let evId = json["event_id"] as? String {
            self.eventId = evId
        }
        if let evName = json["event_name"] as? String {
            self.eventName = evName
        }
        if let evUserGoing = json["going_arr"] as? [[String: Any]] {
            for evUser in evUserGoing {
                let userGoing = userGoingModel(json: evUser)
                self.eventUserGoing.append(userGoing)
            }
        }
    }
}

struct userGoingModel {
    var userName = String?
    var userGender = String?

    init() {
        self.userName = ""
        self.userGender = ""
    }

    init(json : [String: Any]) {
        if let uName = json["name"] as? String {
            self.userName = uName
        }
        if let uGender = json["gender"] as? String {
            self.userGender = uName
        }    
    }
 }

以及您的要求:

Alamofire.request(urlString, method: .get).validate().responseJSON { (response) -> Void in
        if let value = response.data {
            do {
                let json = try JSON(data: data)
                if let dictionnary = json.dictionnaryObject {
                    if let messageArray = dictionnary["message"] as? [[String: Any]] {       
                    for arr in messageArray {
                        self.events.append(eventModel(json: arr))
                    }
                }
            } catch {
                print("cannot convert to Json")
            }
        }
 }

希望它能帮助你找到错误。

关于json - 没有使用 swiftyjson 和 alamofire 在 swift 4 中获取模型类数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50853036/

相关文章:

javascript - 将类似数组的字符串解析为数组

java - JSON 在 Java 中使用 GSON 解码带有 HashMap 成员的自定义类

javascript - 使用jquery放置选项来选择

ruby-on-rails - 如何在 rails 中添加具有多个条目的特定迁移

c# - 在通用 Windows 平台 (UWP) 应用程序中使用 Microsoft.AspNet.Mvc

json - 使用 Decoder swift 嵌套 JSON 时出错

ios - SpriteKit SKTexture 未作为对 SKSpriteNode 的引用传递

ios - 核心数据 : Private context with child Main context - FetchedResultsController not getting updates

ios - UITableView 单元格重新排序拖动操作意外停止

php - 为什么要把MVC中的View拆分成一个view类和一个template