엄지가 결코 0이 될 수 있다고 보장 할 수는 없습니다. 이것 때문에, 당신은 사용해서는 안됩니다! 사용자가 제어 할 수없고 수동으로 설정하지 않았으므로 선택적으로 설정해야합니다.
var thumb: URL?
둘째, 인터넷 전화가 있습니다. 그 전화에 대한 응답을 받기 전에 엄지 손가락을 돌려 보내고 있습니다. 엄지 손가락은 아무 것도 없지만 당신은 그걸로 우리에게 말했습니다! 그건 불가능한 일 이니까, 당신은 추락합니다.
중단 점을 넣으면 if error != nil
줄을 누르기 전에 메서드에서 return thumb
을 누르게됩니다. firebase에서 응답을 받기 전에 메서드가 항상 반환되기 때문에 반환 값을 사용할 수 없으므로 URL은 항상 nil이됩니다. 대신 URL을 완료로 보냅니다.
나는 firebase 코드를 확인하지 않았지만 모두 정상인 경우 원하는 순서입니다.
그래서 :
func downloadThumbnail(thumbnail: String,withCompletion comp: @escaping (URL?, Error?) ->()) {
let _ = DataService.dataService.TAG_PHOTO_REF.child("\(thumbnail)").downloadURL { (thumbnailUrl, error) in
if error != nil {
print(error?.localizedDescription as Any)
comp(nil, error)
} else {
comp(thumbnailUrl, nil)
}
}
}
그래서 당신은 다른 곳을 호출 할 때 :
func getMyImage(cell: UITableViewCell) {
downloadThumbnail(thumbnail: selectedTag.thumbnail) { (thumbnailUrl, error) in
if error != nil {
//show some sort of alert for the user here? or do something to handle the error?
} else {
//the url is an optional URL, so check to make sure it isn't nil
if let url = thumbnailUrl {
cell.photo.kf.setImage(with: url)
} else {
//you didn't get an error from your firebase response
//but the thumbnail url it gave you is broken for some reason
//so again, do something about your error here
}
}
}
이 앱의 디자인 패턴과 일치 알려하지 않습니다. 나는 당신이 tableview를 사용하고 있다고 가정했고,이 메소드들은 다른 클래스에 있다고 생각했다.
감사합니다. – Brkr