当前位置: 首页 > 面试题库 >

无法在当前上下文中推断闭包类型

秦鸿羽
2023-03-14
问题内容

在下面函数的第三行,出现以下错误:

无法在当前上下文中推断闭包类型

我该如何解决?

func fetchAllUsersImages() {
    print("inside func")
    self.ref.child("Posts").child(self.userID).child(self.postNum).observe(.childAdded, with: { snapshot in //error here

        var images: [URL] = []
        if let snapShotValue = snapshot.value as? [String: String] {

            for (_, value) in snapShotValue {
                if let imageURL = URL(string: value) {
                    print(imageURL, "image url here")
                    let imageAsData = try Data(contentsOf: imageURL)
                    let image = UIImage(data: imageAsData)
                    let ImageObject = Image()
                    ImageObject.image = image
                    self.arrayOfImgObj.append(ImageObject)
                    self.tableView.reloadData()
                }
            }
        }
    })
}

问题答案:

它不推断闭包类型的原因是因为try未处理该语句。这意味着关闭预期会"catch"出现错误,但是在您的情况下,您忘记了do-try- catch规则。

因此,您可以尝试使用以下答案来捕获您的错误:

do {
    let imageAsData = try Data(contentsOf: imageURL)
    let image = UIImage(data: imageAsData)
    let ImageObject = Image()
    ImageObject.image = image
    self.arrayOfImgObj.append(ImageObject)
} catch {
    print("imageURL was not able to be converted into data") // Assert or add an alert
}

然后,您可以断言错误(用于测试),或者我个人会设置警报。

这样,应用程序不会崩溃,而是通知用户。我发现这在旅途中 非常 有用,而且我的设备未插入电源-
因此我可以看到错误消息,而不是完全崩溃,不知道发生了什么。



 类似资料:
  • 我正在尝试获取部分应用的函数的列表,如下所示: 编译器向我产生一个错误: 错误[E0277]:类型std::vec::Vec的值 随后的尝试也没有成功: 1. 也只有这一次尝试最终成功了! 为什么在动态闭包方面类型推断如此糟糕? 为什么在第一次尝试中不起作用? 有没有更好的方法来利用类型推理来表达这样的想法?

  • 我编写了一些代码来验证用户是否可以登录到酒店预订平台&我还添加了一个验证步骤。我在方法上得到一个错误。代码中的其他内容都很好。 我做了一些研究,以寻求可能的解决办法。 下面是我在StackOverflow上找到的解决方案:Assert方法错误 删除绑定后,我得到了同样的错误-Microsoft.VisualStudio.TestTools.UnitTesting;使用nunit.framework

  • 为什么可以推断闭包表达式的参数类型和返回类型,而不是rust中的函数?

  • 我的分类测试应用程序有一个问题,我使用了一个比较器。我收到一条信息: 线程“主”java.lang 中的异常:未解决的编译问题:无法推断排序器的类型参数 对于该代码: 分拣机类: 可比接口: id比较器类: 比较器接口: 这样用有什么错?我怎样才能做得更好?

  • 这段代码适用于字符串和整数,但不适用于浮点。我想知道为什么? 这是课堂 这是主要方法