如何传递API参数,并且参数在数组中

时间:2018-12-06 12:30:28

标签: swift api post alamofire

如何传递数组参数

  

参数   [     {       “ id”:0,       “ followerId”:1030,       “ followingId”:1033,       “ followerName”:“字符串”,       “ followingName”:“ string”,       “ createdDate”:“字符串”,       “ message”:“字符串”     }   ] //how to solve this array

API函数

class func postFollowers(params:[String: Any],success:@escaping([FollowingDataProvider]) -> Void, failure:@escaping (String) -> Void){
    var request =  RequestObject()
    request = Services.servicePostForFollower(param: params)

    APIManager.Singleton.sharedInstance.callWebServiceWithRequest(rqst: request, withResponse: { (response) in
        if (response?.isValid)!
        {
            //success()
            print(response?.object as! JSON)
            success(self.followingJSONarser(responseObject: response?.object as! JSON));

            //followingJSONarser(responseObject: response?.object as! JSON)
        }
        else
        {
            failure((response?.error?.description)!)
        }
    }, withError: {
        (error) in
        failure((error?.description)!)
    })
}

解析

static func followingJSONarser(responseObject:JSON) -> [FollowingDataProvider]{
    var dataProvider = [FollowingDataProvider]()
    let jsonDataa = responseObject["data"]
    print(jsonDataa)
    let newJSON = jsonDataa["data"].arrayValue
    print(newJSON)


    for item in newJSON{
        print(item)
        dataProvider.append(FollowingDataProvider(id: item["userId"].intValue, followerId: item["userId"].intValue, followingId: item["followingId"].intValue, followerName: item["userName"].stringValue, followingName: item["followingName"].stringValue, createdDate: item["createdDate"].stringValue, message: item["message"].stringValue))
    }
    return dataProvider
}`

2 个答案:

答案 0 :(得分:0)

您可以尝试将 SwiftyJson Codable

结合使用
struct Root: Codable {
  let id, followerID, followingID: Int
  let followerName, followingName, createdDate, message: String

 enum CodingKeys: String, CodingKey {
    case id
    case followerID = "followerId"
    case followingID = "followingId"
    case followerName, followingName, createdDate, message
 }
}

if let con = response?.object as? JSON {
   do {
       let itemData = try con.rawData() 
       let res  = try JSONDecoder().decode([Root].self, from: itemData) 
       print(res)
   catch {
      print(error)
   }
}

还避免用json强制展开

response?.object as! JSON

答案 1 :(得分:0)

在尝试从API解析数据的代码之后,您可以将SwiftyJSONAlamofire结合使用以创建HTTP请求(发布,获取,放置,删除等)

您应该使用arrayObject而不是arrayValue

您的代码缺少正确的数据解析定义

static func followingJSONarser(responseObject:JSON) -> [FollowingDataProvider]{
    var dataProvider = [FollowingDataProvider]()
    var itemClass = [ItemClass]()
    let jsonDataa = responseObject["data"] as! Dictionary
    let newJSON = jsonDataa["data"].arrayObject as! Array

现在创建一个dataModel类以向其投射数据

class ItemsClass:NSObject{
    var id:Int = 0
    var followerId:Int = 0
    var followingId:Int = 0
    var followerName:String = ""
    var followingName:String = ""
    var createdDate:String = ""
    var message:String = ""

    init(data:JSON) {
        self.id = data["userId"].intValue
        self.followerId = data["userId"].intValue
        self.followingId = data["followingId"].intValue
        self.followerName  = data["userName"].stringValue
        self.followingName = data["followingName"].stringValue
        self.createdDate = data["createdDate"].stringValue
        self.message = data["message"].stringValue
    }

}
    for item in newJSON{
        dataProvider.append(itemClass)
    }
    return dataProvider
}`