Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift-为什么这个找不到变量(let)?_Ios_Swift_Asynchronous - Fatal编程技术网

Ios Swift-为什么这个找不到变量(let)?

Ios Swift-为什么这个找不到变量(let)?,ios,swift,asynchronous,Ios,Swift,Asynchronous,该行: ReturnEmail AlreadyTakenda 不获取变量值。因此,http请求成功地获取了数据,但return命令没有解析正确的数据。您的变量在不同的范围内,那么当您声明它时。因此,您无法访问定义范围之外的变量请查看异步方法。。。网络响应异步返回一个值,因此不能使用正常的同步返回语句,必须使用完成处理程序。不相关,但在Swift中返回值时,不需要括号。。。。为什么要将.mutableContainers强制转换为不可变字典?@vadian.mutableContainers不会有

该行:

ReturnEmail AlreadyTakenda


不获取变量值。因此,http请求成功地获取了数据,但return命令没有解析正确的数据。

您的变量在不同的范围内,那么当您声明它时。因此,您无法访问定义范围之外的变量

请查看异步方法。。。网络响应异步返回一个值,因此不能使用正常的同步返回语句,必须使用完成处理程序。不相关,但在Swift中返回值时,不需要括号。。。。为什么要将.mutableContainers强制转换为不可变字典?@vadian.mutableContainers不会有任何效果,因为变量被声明为无论如何都是不可变的。我认为关于这一行更紧迫的问题是,为什么要转换到NSDictionary而不是Dictionary。@DávidPásztor.mutableContainers在Swift中根本没有效果。我忘记了即使这是中间问题,解决范围问题也不能使OP的代码工作。更紧迫的问题是在异步函数中使用return语句的问题……当然,您是对的,这是下一个问题
func isEmailTaken(email:String) -> String {
    let myUrl = URL(string: "URL");
    var request = URLRequest(url:myUrl!)
    request.httpMethod = "POST"
    let postString = "email=\(email)";
    request.httpBody = postString.data(using: String.Encoding.utf8);
    let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
        if error != nil {
            print("error=\(error)")
            return
        }
        print("response = \(response)")
        do {
            let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary

            if let parseJSON = json {
                let emailAlreadyTakenData = parseJSON["emailAlreadyTaken"] as! String
                print(emailAlreadyTakenData)

            }
        } catch {
            print(error)
        }
    }
    task.resume()

    return(emailAlreadyTakenData)
}