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