У меня проблема с Firebase SDK для iOS в swift 2. Я пытаюсь установить изображение для загрузки из хранилища Firebase. Когда я вызываю функцию, она возвращает нуль. Я думаю, что это связано с тем, что задача загрузки, предоставленная Firebase sdk, является асинхронной, поэтому, когда подразумевается возвращаемое состояние, называется нужный uid, который не требуется, потому что Задача не завершена. Как я могу решить это, чтобы получить правильную картинку?swift Firebase return in asynchron Задача
override func viewDidLoad() {
super.viewDidLoad()
imageView.image = downloadProfilePicFirebase()
}
Firebase функция загрузки:
func downloadProfilePicFirebase() -> UIImage{
print("download called")
//local paths
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let documentDirectorPath:String = paths[0]
let imagesDirectoryPath = documentDirectorPath.stringByAppendingString("/profiles")
var uid = String()
if let user = FIRAuth.auth()?.currentUser {
let uid = user.uid
let storageRef = FIRStorage.storage().referenceForURL("gs://myid.appspot.com")
let profilePicRef = storageRef.child("/profile_pic.jpg")
let homeDir: NSURL = NSURL.fileURLWithPath(NSHomeDirectory())
let fileURL: NSURL = homeDir.URLByAppendingPathComponent("Documents").URLByAppendingPathComponent("profiles").URLByAppendingPathComponent("profile_pic").URLByAppendingPathExtension("jpg")
// Download to the local filesystem
let downloadTask = profilePicRef.writeToFile(fileURL) { (URL, error) -> Void in
if (error != nil) {
print(error)
} else {
// svaed localy now put in ImageView
}
}
}
return UIImage(contentsOfFile: "\(imagesDirectoryPath)"+"/profile_pic_user_"+uid+".jpg")!
}
См. этот [ответ] (http://stackoverflow.com/a/38439609/5654848). – Dershowitz123
@ Dershowitz123 да, но возвращаемое состояние будет вызвано до завершения. Я хочу сохранить функцию в этой точке. –
Также см. Этот вопрос, и ответ, на который я ссылаюсь: http://stackoverflow.com/questions/38547875/how -в-вводного obverveeventtype-в-основной-нить –