在下面函数的第3行,我得到了以下错误:
无法在当前上下文中推断闭包类型
我该怎么解决这个问题?
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()
}
}
}
})
}
3条答案
按热度按时间eiee3dmh1#
它不推断闭包类型的原因是因为
try
语句没有被处理,这意味着闭包应该"catch"
错误,但是在您的例子中,您忘记了do-try-catch
规则。因此,您可以尝试以下答案,这将捕获您的错误:
然后,您可以Assert错误(用于测试),或者我个人会做的是设置警报。
这样应用就不会崩溃,而是会通知用户。我发现这在我的设备没有插电的情况下非常有用--这样我就可以看到错误消息,而不是一个空白的崩溃,不知道发生了什么。
u4vypkhs2#
如果闭包体中有不相关的编译错误,也会发生这个错误。例如,你可能试图比较两个或更多的非布尔类型。
将产生
Unable to infer closure type in the current context
。正确代码:
puruo6ea3#
除了ScottyBlades的回答之外,我还想在“体验”中添加两个数据点。看起来编译器没有很好地处理在块中使用
self
引用不存在的属性。块内的漂亮错误:
奇怪的“表达式类型不明确,没有更多上下文”错误:(注意nonExistentProperty前面的新self)