私は、スクロール可能なアイテムとして画像を持つピッカービューを持っています。私はUnexptected non-void return value in void function
エラーが出てくるので、私のデータベースからそれらのイメージを引き出す必要があります。ここに私のコードは次のとおりです。非同期呼び出しから画像を返す
func pickerView(_ pickerView: AKPickerView, imageForItem item: Int) -> UIImage {
let imgRef = FIRStorage.storage().reference().child("profile_images").child(pets[item])
imgRef.data(withMaxSize: 1 * 1024 * 1024) { (data, error) -> Void in
// Create a UIImage, add it to the array
let pic = UIImage(data: data!)
return pic
}
}
だから、これが動作しない理由を私は理解しますが、私はこれを回避するための最良の方法だものを見つけるのに苦労しています。私が考えることのできる解決策の1つは、コールバックが発生するまで画像を汎用写真に設定してから、ピッカービューの画像を取得した画像に更新することです。しかし、個々のピッカービューアイテムにアクセスしてそのイメージを更新する方法はわかりません。
いくつかの経験を持つ誰もが、私はそれを大幅に感謝したい非同期呼び出しからのデータにこれらの項目を設定する私の目標を達成することができますどのように私に助言を与えることができれば!
、それはコールバックを使用することをお勧めします。あなたは私の答えをもっと見ることができます。 – KrishnaCA
問題が解決したかどうかわかりますか? – KrishnaCA
問題は実際問題です。非同期呼び出しから* anything *を返そうとするのは、それを行う方法ではなく、非同期関数の性質に反します。コールバックを使用しないでください。これは、コードが過度に複雑になり、保守が困難になるためです。簡単な解決策は、firebaseを呼び出すことです。これにより、closure内のイメージが返されます。その後、配列に追加します(データソースが配列であると仮定します)。次に、ピッカービューを更新します。 – Jay