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

2024-06-29

我是 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. 实际发生错误是因为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)
    }
    

其他一些注意事项:

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

    guard let userEmail = userEmailTextField.text, !userEmail.isEmpty, let userPassword = userPasswordTextField.text, !userPassword.isEmpty else {
        displayMyAlertMessage(userMessage: "All Fields are required.")
        return
    }
    
  • 始终将 Swift 常量声明为let(例如resultValue)
  • 不使用NSArray / NSDictionary在斯威夫特.使用本机类型。
  • 不要使用括号if条件和尾随分号。 Swift 中不需要它们。
  • UserDefaults.standard.synchronize()也不需要。
  • String.Encoding.utf8可以简化为.utf8.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Python 解码 JSON 中的嵌套 JSON

    我正在处理一个 API 不幸的是它返回了格式错误 或 奇怪的格式 而是 感谢 fjarri JSON 但从积极的一面来看 我认为这可能是我学习一些有关递归以及JSON 这是我用来记录锻炼的应用程序 我正在尝试制作备份脚本 我可以很好地收到
  • GSON:如何从 Json 中获取不区分大小写的元素?

    下面显示的代码在以下情况下效果很好JSON对象包含jsonKey因为它被传递给该方法 我想知道 是否有一种方法可以获取分配给不区分大小写的键表示的值 Example public String getOutputEventDescripti
  • 使用 Accelerate 框架 32 位与 64 位进行 swift 矩阵乘法

    我正在尝试使用 Accelerate 框架在 Swift 中进行矩阵乘法 使用了vDSP mmulD 这在 iPhone6 6 plus iPad Air 模拟器 所有 64 位架构 中完美运行 但不适用于任何 32 位架构设备 看来 32
  • SpriteKit中滚动背景的速度逐渐增加

    我正在 SpriteKit 中制作一个简单的游戏 并且我有一个滚动背景 简单的情况是 在加载游戏场景时 一些背景图像彼此相邻放置 然后当图像滚动到屏幕外时 图像会水平移动 这是我的游戏场景中的代码didMoveToView method s
  • 如何在 JSON 输出上强制采用 ISO 格式“YYYY-MM-DDThh:mm:ss.sss”?

    我有一个 ASP NET WebApi2 api 它返回一些 JSON 格式的时间戳 时间戳具有毫秒分辨率 通常我会得到这种格式的时间戳 这很好 YYYY MM DDThh mm ss sss 不幸的是 如果时间戳恰好用整秒对日期进行编码
  • Xcode 13.2 - 内部错误:缺少包描述模块[重复]

    这个问题在这里已经有答案了 刚刚通过 Mac App Store 将 Xcode 更新到 13 2 我安装了附加组件 但我的项目将不再编译 Xcode 只是告诉我Internal error missingPackageDescriptio
  • 为什么还调用 calloutAccessoryControlTapped 来点击注释视图?

    我的视图控制器上有一张地图 我不知道为什么 但委托calloutAccessoryControlTapped 当我点击注释视图时也会调用 而不仅仅是当我点击细节关闭时 那么为什么会有这种行为呢 import UIKit import Map
  • ConvertFrom-Json 最大长度

    我在使用 PowerShell v3 转换大小超过 2MB 的 JSON 字符串时遇到问题 PowerShell 使用的 JSON 序列化程序的默认限制设置为 2MB 这解释了该错误 然而 当我在较小的集合上使用 ConvertFrom J
  • 无法打开文件,因为您无权查看该错误

    我在 Google 上搜索并浏览了 Stack Overflow 似乎找不到解决方案 我有 let fileURL URL string file Users me file txt var rawDataString String var
  • 模块“Alamofire”没有名为“SessionManager”的成员

    为什么我会收到此错误 我没有收到 我已经将 Alamofire 更改为 AF 就像使用 Alamofire 5 一样 请指导哪里出了问题以及需要更改什么 下面是我收到错误的代码 private func callAlamoFireForma
  • 在启用垂直分页的 UIScrollView 中垂直滚动

    希望你能给我一些指导 我有一个带有垂直分页的滚动视图设置 我的问题是视图大于屏幕 垂直 我想要的效果是让视图滚动到底部 然后翻到下一页 就像我下面的图片试图描绘的那样 我尝试将滚动视图的大小和内容大小设置为视图的大小 这确实正确地偏移了视图
  • 如何将数据从 swift 传递到 javascript?

    我知道如何将数据从 javascript 传递到 swift 但不知道如何将数据从 swift 传递到 javascript 我用来将数据从 javascript 传递到 swift 的方法如下 h1 WebView Test 3 h1
  • 如何将 Postgres JSONB 数据类型与 JPA 结合使用?

    我没有找到使用 JPA EclipseLink 从 PostgreSQL 映射 JSON 和 JSONB 数据类型的方法 有人在 JPA 中使用这种数据类型并且可以给我一些工作示例吗 所有答案都帮助我找到了适合 JPA 的最终解决方案 而不
  • 在Retrofit 2.0中如何获取JSON对象而不进行转换?

    我需要从 REST 服务器下载 json 对象 而不用 GSON 进行转换 但不明白Retrofit 2 0 bata 1 中如何make 只需使用JsonElement作为你的pojo 例如 在您的 Flower Api 界面中 GET
  • 在 PHP 中格式化 JSON 格式的文本文件

    所以我得到了一个带有按钮的 HTML 页面 当我单击该按钮时 一个单独的 javascript 文件会向我的 PHP 文件发送 GET 请求 并期望返回 JSON 对象 我的 PHP 读取 JSON 格式的文本文件 并将其转换为 JSONO
  • MacOS 上的 SwiftUI 点击行为

    在 MacOS 上的 SwiftUI 应用程序中 我在Line查看内部List 预期的行为是 单击 双击 记录按下中的特殊元素Line 在示例中Text X 触发动作 单击中的其他任意位置Line选择中的元素List 双击其他任意位置Lin
  • 如果用户应答传入的 iMessage,WKWebView 会崩溃

    我的应用程序发生严重崩溃 CALayer position contains NaN 377 833 nan 具有以下堆栈 Fatal Exception CALayerInvalidGeometry 0 CoreFoundation 0x
  • Python,将 mongodump 的 bson 输出转换为 json 对象数组(字典)

    我已经使用转储了 mongodb 集合mongodump命令 输出是一个转储目录 其中包含以下文件 dump coll bson coll metadata json 如何将导出的文件打开到在 python 中工作的字典数组中 我尝试了以下
  • ++ 已弃用,它将在 swift 3 中删除[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 将在 swift 3 中被弃用 变量 现在可以写成 variable 1 我怎样才能重写 variable 请回忆一下之间的区别 varia
  • 在Python中使用argparse解析整个JSON

    我正在尝试使用 ARGPARSE 库在一个简单的参数中解析整个 Json 问题是当它遇到儿子内部的不同元素 例如 和 时 它会突然停止 这是测试代码 parse py import argparse parser argparse Argu

随机推荐