Привет всем, я пробую свои силы на Swift, и я пытаюсь опубликовать регистрационные данные пользователей. Я знаю, как это сделать FireBase, но мой основной проект в PHP MySQL, поэтому я хочу подключить его с Swift
@IBAction func signUp(_ sender: Any) {
//check textfield data
checkTextFields()
//create user
let url = NSURL(string: "http://localhost:8888/helo/register.php")
let request = NSMutableURLRequest(url: url! as URL)
request.httpMethod = "POST"
//apending body to url
let body = "Fullname=\(name.text!.lowercased())&userName=\(userName.text!.lowercased())&emailAddress=\(emailAddress.text!.lowercased())&password=\(password.text!.lowercased())"request.httpBody = body.data(using: String.Encoding.utf8)
//lunching
URLSession.shared.dataTaskWithRequest(request as URLRequest, completionHandler: { (data:NSData?, response:URLResponse?, error:NSError?) in
if error == nil{
dispatch_async(dispatch_get_main_queue(),{
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as?
NSDictionary
guard let parseJSON = json else{
print("Error while parsing")
return
}
let id = parseJSON["id"]
if id != nil {
print(parseJSON)
}
}catch{
print("Caugth an error: \(error)")
}
})
}else{
print("error: \(error)")
}
} )
}
Я получаю ошибку в строке, где я прокомментировал как обед, который говорит
Cannot convert value of type '(NSData?, URLResponse?, NSError?) -> ()' to expected argument type '(Data?, URLResponse?, Error?) -> Void'
Я новичок в Swift, любая помощь приветствуется, спасибо всем. Я использую Xcode 9
После достаточного чтения я просто понял, что делаю очень утомительный и использующий ортодоксальный метод, когда ситуация улучшилась. Я удалил весь код и сделал все с Alamofire. Это действительно легко и прямо. Я опубликую код ниже, чтобы помочь другим, кто столкнется с подобными проблемами позже.
//Constant that holds the URL for our web servicer
let URL_USER_REGISTER = "http://localhost:8888/members/register.php?"
Alamofire.request(URL_USER_REGISTER, method: .post, parameters: parameters).responseJSON{
response in
//printing response
print(response)
//getting json value from the server
if let result = response.result.value {
//converting it as NSDictionary
let jsonData = result as! NSDictionary
//displaying the message in label
self.lableMessage.text = jsonData.value(forKey: "message") as! String?
}
}
Вы должны сначала импортировать Alamofire.
Других решений пока нет …