在下面函数的第三行,出现以下错误:
无法在当前上下文中推断闭包类型
我该如何解决?
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规则。
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 }
然后,您可以断言错误(用于测试),或者我个人会设置警报。
这样,应用程序不会崩溃,而是通知用户。我发现这在旅途中 非常 有用,而且我的设备未插入电源- 因此我可以看到错误消息,而不是完全崩溃,不知道发生了什么。