Xcode:;“登录用户”;不能';尝试读取JSON时无法打开

Xcode:;“登录用户”;不能';尝试读取JSON时无法打开,json,swift,xcode,Json,Swift,Xcode,我正在构建一个通过读取JSON来登录用户的应用程序,但奇怪的事情正在发生,我不明白为什么。因此,当用户输入有效的用户名和密码时,它可以正常工作,但当用户输入错误时,我会遇到以下错误: “loginUser” couldn’t be opened. 这是我为此使用的代码: if let url = URL(string: "http://www.url.com/url/loginUser?loginAlias=" + txtUser.text! + "&loginPassword=" +

我正在构建一个通过读取JSON来登录用户的应用程序,但奇怪的事情正在发生,我不明白为什么。因此,当用户输入有效的用户名和密码时,它可以正常工作,但当用户输入错误时,我会遇到以下错误:

“loginUser” couldn’t be opened.
这是我为此使用的代码:

if let url = URL(string: "http://www.url.com/url/loginUser?loginAlias=" +
txtUser.text! + "&loginPassword=" + txtPassword.text!) {
扩展代码:(我在粘贴到这里时遇到问题)

我尝试通过web浏览器查看JSON,当用户输入有效的用户名和密码时,JSON具有以下结构:

{"alias":"user","firstLogin":true,"id":146,"isEnllum":false,"latitude":00.0000,
"longitude":0.000000,"townId":2,"townStr":"Town1","reply":1,"replyStr":"","role"
:2,"token":"yyjn7q0cia","urlVersion":"https:\/\/we.tl\/t-CX3jqO9Si8"}
但如果不是:

{"error":3,"isEnllum":false,"townId":2,"reply":2,"replyStr":"Username &
password are wrong","urlVersion":"https:\/\/we.tl\/t-CX3jqO9Si8"}
正如您所看到的,两个JSON文件都具有相同的结构,因此我无法找出问题所在

目前,我可以通过使用try-and-catch来管理用户错误输入用户名和密码的情况:

catch {
      let alert = UIAlertController(title:"Error", message: 
      "Username & password are wrong", preferredStyle: 
      UIAlertController.Style.alert)
      alert.addAction(UIAlertAction(title:"Ok", style: 
      UIAlertAction.Style.default, handler:nil))
      self.present(alert, animated:true, completion:nil)
      print("Error: ",error.localizedDescription) /*this prints “loginUser” couldn’t be 
                                                  opened.*/
}
尽管如此,我还是想知道发生这种情况的原因,如果可能的话,我想解决它


提前感谢

我看到您正在使用方法
数据(contentOf:)
从网络URL同步获取数据。在第二种情况下(空/错误的用户名/密码),形成的URL字符串与现有网络资源不对应,因此出现错误。 该错误实际上告诉您未找到资源,因此您可以使用抛出的错误向用户显示自定义消息(而不是
if(user==“”| | password==“”)

您可以打印您正在点击的URL,并直接在浏览器中检查它是否有效


另一方面,同步进行网络请求,因为它会阻塞线程、UI并使应用程序崩溃,而不是使用URLSession的异步任务来实现相同的功能。

什么是“登录用户”?你能扩展代码吗?好的,我已经编辑了我的帖子谢谢你的建议!我不得不看一段视频来帮助我,因为我不知道如何使网络请求异步。另一方面,我已经弄清楚发生了什么,这不是因为if语句,问题是可解码结构,因为令牌字段在另一个JSON文件中不存在,所以我通过划分两个可解码结构来修复它。现在我有一个用于回复字段,另一个用于令牌字段。