Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何处理模型类中的数组?_Ios_Swift_Model - Fatal编程技术网

Ios 如何处理模型类中的数组?

Ios 如何处理模型类中的数组?,ios,swift,model,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" }, {

如何为这个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"]
    }
}
它不起作用了怎么能让它准备好工作
以及如何将值传递给模型的控制器,以及如何从模型中获取值,以便您做出响应:

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
值进行变异。因为
struct
是基于
值的
,而不是基于
引用的

遵循下面的类结构

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
    }
}

您应该使用“反向匹配”来检索数组,而不是“数据”。可能您可以使用第三个库将json数据转换为模型,例如Unbox。

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

struct优于类reference 类别/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)

 }
类登录数据:NSObject{
总数:Int=0
让totalPages:Int=0
let valueData:Array=Array()
重写init(total:Int!,totalPages:Int,valueData:Array!){
self.total=总计
self.totalPages=totalPages
self.valueData=valueData
}
}
结构值数据{
让id:int?
让我们最后登录:字符串?
名称:字符串?
init(id:int!,lastLogin:string,name:string!)
self.id=id±0
self.lastLogin=lastLogin??“”
self.name=名称??“”
}
}

这不是有效的JSON。所有的键都应该是双引号。是的,无效。JSON总是这样尝试,不要在SWIFT中使用基金会<代码> NSARSt/NSCORCHON/<代码>。使用本机类型。
init
方法无法工作。没有键
数据
。您使用的是SwiftyJSON吗?或者不考虑有效的JSON,它只是数据格式化类的一个示例,不用于处理这一个,以及如何给字段赋值,可以使用<代码>结构> <代码>。类也可以这样设计值<代码>变量obj=Model()obj.total=1
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)

 }
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 ?? ""
}
}