如何在xcode 8 swift 3中将字段值传递为字符串类型?
问题描述:
我试图了解xcode 8 swift 3中的post请求的过程。如何在xcode 8 swift 3中将字段值传递为字符串类型?
我设法通过将值添加到“paramString”来手动发布数据。
我的问题是,如果输入数据来自textfield如何传递数据?
我把它命名为usernameTxt和passwordTxt。如何使用下面的代码将这些值传递给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()
}
}
答
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)
{}
}
答
的参数字符串的POST请求格式必须是
key1=value&key2=value2
一种方便的方法来创建该字符串是String Interpolation
let paramString = "data=\(name)&data2=\(pass)"
这是很好的编程习惯来检查text
属性是不是nil
而不是空的。进一步在Swift 3中使用本机结构URL
和URLRequest
。
顺便说一句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()
}
你可能想看看API refernce为['UITextField'(https://developer.apple.com/reference/uikit/uitextfield) – MadProgrammer
感谢您的答复,:)。 。我仍然试图理解这个概念和流程。 。同时,也许有人可以快速回答如何将这些usernameTxt,passwordTxt值分配给“let StringParam”..上面的代码,只需要最后一次触摸。 – AlotJai
它看起来像我只能传递一个字符串变量像这样let name = usernameTxt.text,让paramString =“data =”+ name! 。我不知道如何传递这两个值。 – AlotJai