gpt4 book ai didi

json - 尝试从 json 获取数据时对成员 `jsonObject(with:options:)` 的引用不明确

转载 作者:可可西里 更新时间:2023-11-01 01:18:49 35 4
gpt4 key购买 nike

我是 Swift 的新手,在制作其中一个教程(相当旧)时涉及通过返回 JSON 的 php 从服务器获取凭据,但我遇到了错误 Ambiguous reference to member jsonObject (with:options:) 在 json var 中,我搜索并尝试应用不同的解决方案但无济于事。 :(

感谢您的宝贵时间和帮助。

这是我的代码:

let userEmail = userEmailTextField.text;
let userPassword = userPasswordTextField.text;

if((userEmail?.isEmpty)! || (userPassword?.isEmpty)!) {
displayMyAlertMessage(userMessage: "All Fields are required.")
return;
}

let myUrl = URL(string: "/UserLogin.php");
var request = URLRequest(url:myUrl!);
request.httpMethod = "POST";
let postString = "email\(userEmail)&password=\(userPassword)";

request.httpBody = postString.data(using: String.Encoding.utf8);

let task = URLSession.shared.dataTask(with: request as URLRequest) {
data, URLResponse, error in

if error != nil {
//print = ("error=\(error)");
return
}

var err: Error?
var json = JSONSerialization.jsonObject(with: data, options: .mutableContainers, error: &err) as? NSDictionary

if let parseJSON = json {
var resultValue:String = parseJSON["status"] as String!;
print("result: \(resultValue)")


if(resultValue == "Success") {
//Login Succesful
UserDefaults.standard.set(true, forKey:"isUserLoggedIn");
UserDefaults.standard.synchronize();
self.dismiss(animated: true, completion: nil);

}
}
}

task.resume()

最佳答案

主要有两个问题:

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

    let task = URLSession.shared.dataTask(with: request) {  data, response, error in
  2. 由于您使用的是 Swift 3,因此 jsonObject(with 中没有 error 参数。该方法执行 throw,您需要一个 do - catch block 。和往常一样,选项 .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)
    }

一些其他注意事项:

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

    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。使用原生类型。
  • 不要在 if 条件和尾随分号周围使用括号。 Swift 不需要它们。
  • UserDefaults.standard.synchronize() 也不需要。
  • String.Encoding.utf8 可以简化为 .utf8

关于json - 尝试从 json 获取数据时对成员 `jsonObject(with:options:)` 的引用不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44937336/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com