2017-01-10 23 views
0

我试图了解xcode 8 swift 3中的post请求的过程。如何在xcode 8 swift 3中将字段值传递为字符串类型?

我设法通过将值添加到“paramString”来手动发布数据。

我的问题是,如果输入数据来自textfield如何传递数据?

我把它命名为usernameTxtpasswordTxt。如何使用下面的代码将这些值传递给PHP MySQL?

“paramString”将是如果视图控制器有多个文本字段输入到Web服务?

到目前为止我的代码如下

import UIKit 
class ViewController: UIViewController { 

    @IBOutlet var usernameTxt: UITextField! 
    @IBOutlet var passwordTxt: UITextField! 
    @IBOutlet var loginButton: UIButton! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
    @IBAction func sendData(_ sender: Any) { 
     data_request("http://localhost/send.php") 
    } 
    func data_request(_ url:String) 
    { 
     let name = usernameTxt.text 
     let pass = passwordTxt.text 

     let url:NSURL  = NSURL(string: url)! 
     let session   = URLSession.shared 

     let request   = NSMutableURLRequest(url: url as URL) 
     request.httpMethod = "POST" 

     let paramString  = "data=" + name! 
     // let paramString = "data=" + name! + "data2=" + pass! //this line does not work 
     request.httpBody = paramString.data(using: String.Encoding.utf8) 

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

      guard let _:NSData = data as NSData?, let _:URLResponse = response, error == nil else { 
       print("Error") 
       return 
      } 

      if let dataString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue){ 
       print(dataString) 
      } 
     } 
     task.resume() 
    } 
} 
+0

你可能想看看API refernce为['UITextField'(https://developer.apple.com/reference/uikit/uitextfield) – MadProgrammer

+0

感谢您的答复,:)。 。我仍然试图理解这个概念和流程。 。同时,也许有人可以快速回答如何将这些usernameTxt,passwordTxt值分配给“let StringParam”..上面的代码,只需要最后一次触摸。 – AlotJai

+0

它看起来像我只能传递一个字符串变量像这样let name = usernameTxt.text,让paramString =“data =”+ name! 。我不知道如何传递这两个值。 – AlotJai

回答

0

usernameTxt.textpasswordTxt.text

+0

你能分享或更新我的上述代码的答案?我不知道在哪里以及如何投入这些价值。我在这个ios开发中很初学。仍然很难理解流程和概念。谢谢。 – AlotJai

+0

这是这样吗?让paramString =“data =”+ usernameTxt.text! – AlotJai

-1
 You can try this code for api request with parameter 
      let user_id = 1 
      let name = 'test' 
     let post:NSString = "id=\(user_id)&name=\(name)" as NSString 
        let url:URL = URL(string:"ADD YOUR URL HERE")! 
        let postData:Data = post.data(using: String.Encoding.ascii.rawValue)! 
        let postLength:NSString = String(postData.count) as NSString 

        let request:NSMutableURLRequest = NSMutableURLRequest(url: url) 
        request.httpMethod = "POST" 
        request.httpBody = postData 
        request.setValue(postLength as String, forHTTPHeaderField: "Content-Length") 
        request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
        request.setValue("application/json", forHTTPHeaderField: "Accept") 

        var reponseError: NSError? 
        var response: URLResponse? 

        var urlData: Data? 
        do { 
         urlData = try NSURLConnection.sendSynchronousRequest(request as URLRequest, returning:&response) 
        } catch let error as NSError { 
         reponseError = error 
         urlData = nil 
        } 

        if (urlData != nil) { 
         let res = response as! HTTPURLResponse!; 

         if ((res?.statusCode)! >= 200 && (res?.statusCode)! < 300) 
         {} 

    } 
+0

它是异步的吗? – AlotJai

+0

是的,它是异步请求 –

+0

你的建议只使用一个变量。你能为两个变量输入更新你的答案吗?谢谢 。 。 – AlotJai

0

的参数字符串的POST请求格式必须是

key1=value&key2=value2 

一种方便的方法来创建该字符串是String Interpolation

let paramString = "data=\(name)&data2=\(pass)" 

这是很好的编程习惯来检查text属性是不是nil而不是空的。进一步在Swift 3中使用本机结构URLURLRequest

顺便说一句Swift不是PHP。命名惯例是使用骆驼事件。

... 
@IBAction func sendData(_ sender: AnyObject) { 
    dataRequest("http://localhost/send.php") 
} 

func dataRequest(_ url:String) 
{ 
    guard let name = usernameTxt.text, !name.isEmpty, 
     let pass = passwordTxt.text, !pass.isEmpty else { return } 

    let url = URL(string: url)! 
    let session = URLSession.shared 

    var request = URLRequest(url: url) 
    request.httpMethod = "POST" 

    let paramString = "data=\(name)&data2=\(pass)" 
    request.httpBody = paramString.data(using: .utf8) 

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

     guard error == nil else { 
      print("Error: ", error!) 
      return 
     } 

     if let dataString = String(data: data!, encoding: .utf8) { 
      print(dataString) 
     } 
    } 
    task.resume() 
} 
相关问题