尝试从json

时间:2017-07-05 23:06:06

标签: json swift

我是Swift的新手,并且制作其中一个教程(相当陈旧),其中涉及通过php从服务器获取凭据,返回JSON,但我仍然遇到错误{{1}在json var中,我搜索并尝试应用不同的解决方案,但无济于事。 :(

感谢您的时间和帮助。

这是我的代码:

Ambiguous reference to member jsonObject(with:options:)

1 个答案:

答案 0 :(得分:2)

有两个主要问题:

  1. 发生实际错误是因为完成块中的response参数错误。 <而不是类型URLResponse,它必须是参数标签/变量。

    let task = URLSession.shared.dataTask(with: request) {  data, response, error in
    
  2. 由于您使用的是Swift 3,error中没有jsonObject(with参数。该方法执行throw,您需要do - catch块。并且 - 一如既往 - 选项.mutableContainers在Swift中完全没用。省略参数。

    do {
        if let parseJSON = try JSONSerialization.jsonObject(with: data) as? [String:Any],
           let resultValue = parseJSON["status"] as? String {
              print("result: ", resultValue)
    
              if resultValue == "Success" {
                  //Login Succesful
                  UserDefaults.standard.set(true, forKey:"isUserLoggedIn")
                  self.dismiss(animated: true, completion: nil)
              }
        }
    } catch {
      print(error)
    }
    
  3. 其他一些说明:

    • 要安全地检查文本字段,请使用可选绑定

      guard let userEmail = userEmailTextField.text, !userEmail.isEmpty, let userPassword = userPasswordTextField.text, !userPassword.isEmpty else {
          displayMyAlertMessage(userMessage: "All Fields are required.")
          return
      }
      
    • 将Swift常量声明为let(例如resultValue
    • 不要在Swift中使用NSArray / NSDictionary。使用原生类型。
    • 请勿在{{1​​}}条件周围使用括号并使用分号。 Swift中不需要它们。
    • if也不需要。
    • UserDefaults.standard.synchronize()可以简化为String.Encoding.utf8