如何在模型类中处理数组?

时间:2017-07-13 09:13:55

标签: ios swift model

如何为此json数据制作模型类

{
    total: 41,
    totalPages: 4,
    valueData: [
    {
    id: "23",
    lastLogin: "0-Jul-2011 11:27:36 AM",
    name: "varii"
    },
    {
    id: "24",
    lastLogin: "0-Jul-2015 11:27:36 AM",
    name: "sarii"
    },
    {
    id: "25",
    lastLogin: "0-Jul-2018 11:27:36 AM",
    name: "narii"
    } ]

}


class OnResponse {

    var total: Int?
    var totalPages: Int?

    init(response: [String: Any]) {
        self.total = response["total"]
        self.totalPages = response["totalPages"]
    }
}

如何才能让它为工作做好准备 以及如何将值传递给控制器​​以建模以及如何从模型中获取值

6 个答案:

答案 0 :(得分:1)

遵循以下课程结构

class Response {
    var total: Int?
    var totalPages: Int?
    var valueData: [LoginData]?

    init(response: [String: Any]) {
       self.total = response["total"]
       self.totalPages = response["totalPages"]
       var items:[LoginData] = ()
       for (data in response["valueData"]) {
           let login = LoginData(name: data["name"], lastLogin: data["lastLogin"])
           items.append(login)
       }
       self.valueData = items
    }
}

class LoginData {
    var name: String?
    var lastLogin: String?

    init(name: String, lastLogin: String) {
        self.name = name
        self.lastLogin = lastLogin
    }
}

答案 1 :(得分:0)

您的回复模型:

struct ModelName {

    var total: Int?
    var totalPage: Int?
    var reverseMatches: [LoginDetails]?
}

struct LoginDetails {

    var id: String?
    var lastLogin: String?
    var name: String?
}

解析api响应并在适当的字段上分配值。我已经做了,所有变量都是可选的。

分配如下所示的值。

var obj = Model()
obj.total = response["total"] as? Int

obj应为var,因为您要改变struct值。因为structvalue based,而不是reference based

答案 2 :(得分:0)

你应该使用" reverseMatches"检索数组,而不是"数据"。可能是您可以使用第三个库将您的json数据转换为模型,例如Unbox,https://github.com/JohnSundell/Unbox

答案 3 :(得分:0)

class DataModel{
    var total : Int?
    var totalPages : Int?
    var valueData : [UserModel]?

    init(JSON: [String:Any?]){
        self = parser.doParse(JSON: JSON)
    }
}

class UserModel{
    var id : String?
    var lastLogin : String?
    var name : String?
}

class parser : NSObject{
    class func doParse(JSON: [String:Any?])->DataModel{
        let dataModel = DataModel()
        dataModel.total = JSON["total"] as? Int
        dataModel.totalPages = JSON["totalPages"] as? Int
        var userInfo : [UserModel] = []
        let valueData : [String:String?]? = JSON["valueData"] as? [String:String?]
        if let valueData = valueData{
            for dataDict : [String:String?] in valueData{
                let itemModel = UserModel()
                itemModel.id = dataDict["id"] as? String
                itemModel.lastLogin = dataDict["lastLogin"] as? String
                itemModel.name = dataDict["name"] as? String
                userInfo.append(itemModel)
            }
            dataModel.valueData = userInfo
        }
        return dataModel
    }
}

答案 4 :(得分:0)

你应该使用struct而不是class来创建模型对象......

struct over class的优点  Why Choose Struct Over Class?  类/ 24232845  使用两个结构来保存数据,一个用于单个总计数  和其他用于最后登录详细信息

struct lastLogin  {

let totalCount: (total: Int, totalPages: Int)
let valueArray: [lastLoginDetail]

}


struct lastLoginDetail {

let valueData: (id: String, lastLogin: String,name: String)

}

extension lastLoginDetail {

init(json: [String : String]) throws {
    let id = json["id"]
    let lastLogin = json["lastLogin"]
    let name = json["name"]
    let value = (id,lastLogin,name)
    self.valueData = value as! (id: String, lastLogin: String, name: String)
}

}

extension lastLogin {

init(json: [String : Any]) throws {
     let total = (json["total"] as! NSNumber).intValue
     let totalPages = (json["totalPages"] as! NSNumber).intValue
     let totalCounts = (total,totalPages)
     var userInfo : [lastLoginDetail] = []
    // Extract and validate valueData
    let valueData = json["valueData"] as? NSArray
    if let valueData = valueData{
      for dataDict   in valueData{
        let dic : [String : String] = dataDict as! [String : String]
        let  lastLoginDeatails = try! lastLoginDetail(json: dic)
        userInfo.append(lastLoginDeatails)
    }
    }
    self.valueArray = userInfo
    self.totalCount = totalCounts
}

}



func HowToUseModelClass(){

let jsonDic  = NSDictionary()
// jsonDic // your json value
let  dataValue = try! lastLogin(json: (jsonDic as! [String : Any])) // parsing the data
print(dataValue.totalCount.total)
print(dataValue.totalCount.totalPages)
print(dataValue.valueArray[0].valueData.id)

 }

答案 5 :(得分:0)

class LoginData: NSObject {
let total: Int = 0
let totalPages: Int = 0
let valueData: Array<ValueData> = Array<ValueData>()
override init(total: Int!, totalPages: Int, valueData: Array<ValueData>!) {
self.total = total
self.totalPages = totalPages
self.valueData = valueData
}
}

struct ValueData {
let id: int?
let lastLogin: String?
let name: String?
init(id: int!, lastLogin: string, name: string!)
self.id = id ?? 0
self.lastLogin = lastLogin ?? ""
self.name = name ?? ""
}
}