web-dev-qa-db-ja.com

現在のコンテキストでクロージャタイプを推測できません

以下の関数の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
user10497264

クロージャタイプを推測しないのは、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移動中に便利であり、デバイスが接続されていないので、何が起こったのかわからないまま、空のクラッシュの代わりにエラーメッセージを表示できます。

7
George_E