【问题标题】:Swift 3 request post , response returns nilSwift 3 请求发布,响应返回 nil
【发布时间】:2017-04-07 03:02:15
【问题描述】:

我有发布请求和解析响应 json 代码,但我的代码不起作用。

我的班级代码

    @discardableResult
    open func  getLoginMethod(_ method: String, parameters: String, completionHandler: @escaping (_ login: [Login]?, _ error: Error?) -> Void) -> URLSessionTask! {
        let session = URLSession.shared
        guard let url = NSURL(string: parameters) else {
            completionHandler(nil, myErrors.InvalidUrlError)
            return nil
        }

        let request = NSMutableURLRequest(url: url as URL)
        request.httpMethod = "POST"
        let sendingdata = "Simple=1"
        request.httpBody = sendingdata.data(using: String.Encoding.utf8);

        let task = session.dataTask(with: request as URLRequest) { data, response, error in

             if error != nil {
                completionHandler(nil, myErrors.getError)
            } else {
                do {
                    let login = try self.getLogin(jsonData: data! as NSData)

                    print(login)

                    completionHandler(login, nil)
                } catch {
                    completionHandler(nil, error)
                }
            }
        }
        task.resume()

        return task
    }

当我点击操作按钮时,代码只给了我

输出。我在哪里做错任何想法?

【问题讨论】:

  • @Vinodh 是的,确保型号代码正确。我认为 request.httpBody = sentdata.data 错误(使用:String.Encoding.utf8);或者如果让 jsonArray = 尝试 JSONSerialization.jsonObject(with: jsonData as Data, options: .allowFragments) as? [字符串:AnyObject] {
  • @Vinodh 我也添加了登录模型
  • @Vinodh 不一样

标签: ios json swift post request


【解决方案1】:

请找到下面正在使用的代码,它与本地儿子可以正常工作。因为您没有提供 url 和其他详细信息

    if let file = Bundle.main.path(forResource: "response", ofType: "json") {
                do {
                    let jsonData = try Data(contentsOf: URL(fileURLWithPath: file))
                    let login = try self.getLogin(rawData: jsonData )

                    let arr = login.first

                    if let date = arr?.ServerCurrentDate {

                        print("Comming Date  = \(date)")


                    }

                }
                catch{
                    print(error)
                }
            }


 private func getLogin(rawData: Data) throws -> [Login] {
        var login = [Login]()

        do {
            if let jsonDict = try JSONSerialization.jsonObject(with: rawData, options: .allowFragments) as? [String: AnyObject] {
                print(jsonDict)
                if let result = jsonDict["Result"] as? [String : AnyObject]
                {
                    var properties = [String: AnyObject]()
                    properties["IsSuccess"] = result["IsSuccess"] as? Bool as AnyObject?
                    properties["MemberId"] = result["MemberId"] as? Int as AnyObject?
                    properties["Name"] = result["Name"] as? String as AnyObject?
                    properties["Image"] = result["Image"] as? String as AnyObject?
                    properties["FacebookId"] = result["FacebookId"] as? Int as AnyObject?
                    properties["FacebookMail"] = result["FacebookMail"] as? String as AnyObject?
                    properties["Phone"] = result["Phone"] as? String as AnyObject?
                    properties["Code"] = result["Code"] as? String as AnyObject?
                    properties["Token"] = result["Token"] as? String as AnyObject?
                    properties["ServerCurrentDate"] = result["ServerCurrentDate"] as? String as AnyObject?
                    let loginget = Login(properties: properties)
                    login.append(loginget)
                }

            }
        } catch {
            print(error)
        }
        return login
    }

还有我本地的json文件

response.json

{
    "Result": {
        "IsSuccess": true,
        "MemberId": 73,
        "Name": "X4r-7a",
        "Image": "MemberImage/48a25240-26a9-46bf-8eb5-72a6b86ad555.png",
        "FacebookId": null,
        "FacebookMail": null,
        "Phone": "0111111112",
        "Code": "5425",
        "Token": "570f4112-0f37-4e23-a2d7-5dad6af9378a",
        "ServerCurrentDate": "2016-11-23-10-41-32"
    }
}

【讨论】:

  • @Vinodth 男,请批准编辑。你的代码使用真正的 json 文件,但我认为我有服务器端问题。
  • 你只有我给了这个回复,所以我用了。
【解决方案2】:

您的值比 json 结构更深一层:

... 

if let result = jsonDict["Result"] as? [String : AnyObject] 
{
   properties[LoginJsonKeys.Name] = result["Name"] as? String
}
...

希望对你有帮助

【讨论】:

  • 是的,我像你展示的那样将它添加到我的类代码中,但输出时相同的结果为零。
猜你喜欢
  • 2021-05-21
  • 2020-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-29
  • 2019-05-07
  • 2019-09-20
相关资源
最近更新 更多