如何在POST方法的requst.httpBody中传递动态参数

时间:2016-12-21 13:07:51

标签: ios json web-services rest swift3

我正在访问我的webservices,直到xcode 7.3我更新到xcode 8.2和swift 3,现在我的应用程序崩溃了,这是我的代码

func jsonParsingFromURL () throws {

    let WSLink = "http://XXXXX.co/itXXXXMS/webservice.asmx/GXXXXXX"
    let url = URL(string: WSLink)
    let bodyData = "lastlogindate=\(todayDate)&CompanyId=\(compID)"  //problem is here

    let request:NSMutableURLRequest = NSMutableURLRequest(url:url!)
    request.httpMethod = "POST"
    request.httpBody = bodyData.data(using: String.Encoding.utf8);

    NSURLConnection.sendAsynchronousRequest(request as URLRequest, queue: OperationQueue.main) {(response, data, error) in

        guard let _ = data else { return }
        self.startParsing(data!)
    }
}

func startParsing(_ data :Data) {

    //Am getting error here in this line
    let dict: NSDictionary!=(try! JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers)) as! NSDictionary  
    arrDict.removeAllObjects()

    for i in 0  ..< (dict.value(forKey: "results") as! NSArray).count {
        arrDict.add((dict.value(forKey: "results") as! NSArray) .object(at: i))
    }
}
  

json文本没有以数组或对象和允许选项开头   片段没有设置

实际上我找到了错误的原因,但不知道如何修复它。

当我写作时,让bodyData =&#34; lastlogindate = 26/11 / 2016&amp; CompanyId = 3&#34; //它正在运作。

当我将参数包装在来自之前的viewController的动态变量中时,如

让date =&#34; 26/11/2016&#34;,让id =&#34; 3&#34;和

让bodyData =&#34; lastlogindate =(date)&amp; CompanyId =(id)&#34;然后我得到错误。

基本上我的问题是如何在swift 3中将动态变量包装到request.httpBody?

1 个答案:

答案 0 :(得分:0)

在将参数传递给bodyData时,我的问题出在这一行:

let bodyData = "lastlogindate=\(todayDate)&CompanyId=\(compID)"

//example lastlogindate = "12/24/2016" and CompanyId = 134

当我print(bodyData)时,我将输出作为     &#34; lastlogindate = <强>可选的(2016年12月24日)及CompanyId = <强>可选的(134)&#34;

为什么optional被添加到Swift 3中,我不知道。
在Swift 2.2中,它没有添加optional

所以,我做的是

let bodyData = "lastlogindate=" + todayDate + "&CompanyId=" + compID

现在,当我print(bodyData)时,它会给我正确的输出

lastlogindate=12/24/2016&CompanyId=134.