3 ios firebase swift firebase-realtime-database
在下面函数的第三行,出现以下错误:
无法在当前上下文中推断闭包类型
我该如何解决?
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()
}
}
}
})
}
Run Code Online (Sandbox Code Playgroud)
如果您的闭包主体中存在不相关的编译错误,也可能会发生此错误。例如,您可能尝试比较两个或多个非布尔类型。
extension Array where Element == Resistance {
init(_ points: [Point]) {
let peaks = points.beforeAndAfter { (before, current, after) -> Bool in
before < current && current > after
}
self = []
}
}
Run Code Online (Sandbox Code Playgroud)
将产生Unable to infer closure type in the current context.
正确的代码:
extension Array where Element == Resistance {
init(_ points: [Point]) {
let peaks = points.beforeAndAfter { (before, current, after) -> Bool in
before.value < current.value && current.value > after.value
}
self = []
}
}
Run Code Online (Sandbox Code Playgroud)
它不推断闭包类型的原因是因为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
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以断言一个错误(用于测试),或者我个人会设置一个警报。
这样,应用程序不会崩溃,而是通知用户。我发现这在旅途中非常有用,而且我的设备未插入电源-因此我可以看到错误消息,而不是完全崩溃,不知道发生了什么。
| 归档时间: |
|
| 查看次数: |
6125 次 |
| 最近记录: |