Php 无法从类型为';的抛出函数清除无效转换错误;(u,u,u)抛出->;()';到非抛出函数类型

Php 无法从类型为';的抛出函数清除无效转换错误;(u,u,u)抛出->;()';到非抛出函数类型,php,mysql,xcode,swift,error-handling,Php,Mysql,Xcode,Swift,Error Handling,我收到一个错误,因为标题中有贬义 从类型为“(,,)的抛出函数抛出->()”到非抛出函数类型“(NSData?,NSURLResponse?,NSError?)的转换无效->无效” 会话结束后,dataTaskWithRequest。这是一个简单的PHP和mysql用户注册。在Swift xcode 7.3中 func displaymyalertmessage(userMessage:String) { var myAlert = UIAlertController(

我收到一个错误,因为标题中有贬义

从类型为“(,,)的抛出函数抛出->()”到非抛出函数类型“(NSData?,NSURLResponse?,NSError?)的转换无效->无效”

会话结束后,dataTaskWithRequest。这是一个简单的PHP和mysql用户注册。在Swift xcode 7.3中

 func displaymyalertmessage(userMessage:String)
    {
        var myAlert = UIAlertController(title: "Alert" , message:userMessage, preferredStyle: UIAlertControllerStyle.Alert); 
        let OkAction = UIAlertAction (title: "Ok", style: UIAlertActionStyle.Default, handler:nil);
        myAlert.addAction(OkAction);
        self.presentViewController(myAlert, animated:true, completion:nil);
    }

    // check for empty fields
    if(useremail!.isEmpty || username!.isEmpty ||
    userpassword!.isEmpty ||
        userrepeatpassword!.isEmpty){
        // Display alert message
            displaymyalertmessage("All fields are required");
        return; 
    }
        //Check if passwords match
        if(userpassword != userrepeatpassword)
        { 
            // display an alert message

            displaymyalertmessage("Passwords do not match");
            return;   
        } 
    // send data to server
    let myUrl = NSURL(string: "http://example/xxx.php")
    let request = NSMutableURLRequest(URL:myUrl!);
    var session = NSURLSession.sharedSession()
    request.HTTPMethod = "POST";

    let postString = "email=\(useremail)&password=\(userpassword)&username=\(username)"

    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);
在下一个任务中,我收到错误(,,,)


我尝试了很多方法,但无法清除此错误。

您需要将
try catch
移到回调块范围中。此外,您不应通过引用将
err
传递到
JSONObjectWithData
,因为它会引发错误。这应该起作用:

let task = session.dataTaskWithRequest(request) { (data, response, error) in          
    // if error          
    if error != nil {
        print("error=\(error)")
        return
    }          

    var json: NSDictionary? = nil
    do {
       json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary
    } catch {
        print("error=\(error)")
    }
    //...

您需要将
try catch
移动到回调块范围中。此外,您不应通过引用将
err
传递到
JSONObjectWithData
,因为它会引发错误。这应该起作用:

let task = session.dataTaskWithRequest(request) { (data, response, error) in          
    // if error          
    if error != nil {
        print("error=\(error)")
        return
    }          

    var json: NSDictionary? = nil
    do {
       json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary
    } catch {
        print("error=\(error)")
    }
    //...

您应该使用
try?
try
而不仅仅是
尝试
try
传播使整个闭包成为抛出闭包的错误,这在本例中是不允许的。您应该使用
try?
try
而不仅仅是
尝试
try
传播使整个闭包成为抛出闭包的错误,这在本例中是不允许的。我尝试了此操作,现在得到了一个无效的标识符json@Mro我已经更新了答案。希望它能解决你的问题我试过了,现在我得到了一个无效的标识符json@Mro我已经更新了答案。希望它能解决你的问题