以下の関数の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()
}
}
}
})
}
クロージャタイプを推測しないのは、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
}
次に、エラー(テスト用)をアサートするか、私が個人的に行うことであるアラートを設定します。
この方法では、アプリはクラッシュしませんが、代わりにユーザーに通知します。私はこれがvery移動中に便利であり、デバイスが接続されていないので、何が起こったのかわからないまま、空のクラッシュの代わりにエラーメッセージを表示できます。