如何在XCode 8 Swift 3中将文本字段值作为String类型传递? [英] How to pass textfield value as String type in xcode 8 swift 3?
问题描述
我试图了解xcode 8 swift 3中的发布请求过程.
I'm trying to understand the process of post request in xcode 8 swift 3.
我设法通过向"paramString"中添加值来手动发布数据.
我的问题是,如果输入数据来自文本字段,如何传递数据?
我将其命名为 usernameTxt 和 passwordTxt .如何使用下面的代码将这些值传递给PHP MySQL?
I named it usernameTxt and passwordTxt. How to pass these value into PHP MySQL using the code below?
如果视图控制器在Web服务中输入了多个文本字段,"paramString" 将是什么?
What would "paramString" will be if the view controller have multiple textfield input into web services?
到目前为止我的代码
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()
}
}
推荐答案
POST请求的参数字符串必须采用格式
A parameter string for a POST request must be in format
key1=value&key2=value2
创建字符串的便捷方法是字符串插值
A convenient way to create the string is String Interpolation
let paramString = "data=\(name)&data2=\(pass)"
检查text
属性是否不是nil
并且不为空是一种良好的编程习惯.在Swift 3中进一步使用本机结构URL
和URLRequest
.
It's good programming habit to check if the text
properties are not nil
and not empty. Further in Swift 3 use the native structs URL
and URLRequest
.
顺便说一下,Swift不是PHP.命名约定是使用驼峰式大小写.
By the way Swift is not PHP. The naming convention is to use camel case.
...
@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()
}
这篇关于如何在XCode 8 Swift 3中将文本字段值作为String类型传递?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!