Обновление массива swift 4 - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь обновить массив изображений, загрузив изображение из базы данных Firebase.Но по какой-то причине после обновления массива внутри функции он не обновляется в функции viewdidload.Я новичок в Xcode.Есть идеи?

var images:[UIImage] = []
override func viewDidLoad() {
    super.viewDidLoad()
    ref = Database.database().reference()
    retrieveImage()
    print(self.images)
}

func retrieveImage(){
    let userID = Auth.auth().currentUser?.uid

    ref.child("Images").observeSingleEvent(of: .value, with: { (snapshot) in

        let userImage = snapshot.value as? NSDictionary
        let imageURLArray = userImage?.allKeys

        if userImage != nil{

            for index in 0...userImage!.count-1{
                let imageProfile = userImage![imageURLArray?[index]] as? NSDictionary
                let imageURL = imageProfile!["url"]
                let storageRef = Storage.storage().reference(forURL: imageURL as! String)
                storageRef.getData(maxSize: 1 * 1024 * 1024) { data, error in
                    if let error = error {
                        print(error.localizedDescription)
                    } else {

                        let image = UIImage(data: data!)
                        self.images.append(image!)

                    }
                }

            }
        }
    }) { (error) in
        print(error.localizedDescription)
    }

}

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

вы можете использовать как это

var images:[UIImage] = []
override func viewDidLoad() {
super.viewDidLoad()
ref = Database.database().reference()
retrieveImage {
    print(self.images)
}
}

func retrieveImage(_ completion: () -> Void){
let userID = Auth.auth().currentUser?.uid

ref.child("Images").observeSingleEvent(of: .value, with: { (snapshot) in

    let userImage = snapshot.value as? NSDictionary
    let imageURLArray = userImage?.allKeys

    if userImage != nil {
        for index in 0...userImage!.count-1 {
            let imageProfile = userImage![imageURLArray?[index]] as? NSDictionary
            let imageURL = imageProfile!["url"]
            let storageRef = Storage.storage().reference(forURL: imageURL as! String)
            storageRef.getData(maxSize: 1 * 1024 * 1024) { data, error in
                if let error = error {
                    completion()
                    print(error.localizedDescription)
                } else {
                    let image = UIImage(data: data!)
                    self.images.append(image!)
                    if index == userImage!.count-1 {
                        completion()
                    }
                }
            }

        }
    } else {
        completion()
    }
}) { (error) in
    print(error.localizedDescription)
    completion()
}

}
0 голосов
/ 07 декабря 2018

, так как наблюдайте, чтоSensEvent выполняется асинхронно, функция печати вызывается перед завершением наблюдения.Вы можете исправить это так, используйте закрытие

var images:[UIImage] = []
override func viewDidLoad() {
    super.viewDidLoad()
    ref = Database.database().reference()
    retrieveImage {
        print(self.images)
    }
}
func retrieveImage(_ completion: () -> Void){
    let userID = Auth.auth().currentUser?.uid

    ref.child("Images").observeSingleEvent(of: .value, with: { (snapshot) in

    let userImage = snapshot.value as? NSDictionary
    let imageURLArray = userImage?.allKeys

    if userImage != nil{

        for index in 0...userImage!.count-1{
            let imageProfile = userImage![imageURLArray?[index]] as? NSDictionary
            let imageURL = imageProfile!["url"]
            let storageRef = Storage.storage().reference(forURL: imageURL as! String)
            storageRef.getData(maxSize: 1 * 1024 * 1024) { data, error in
                if let error = error {
                    print(error.localizedDescription)
                } else {

                    let image = UIImage(data: data!)
                    self.images.append(image!)

                }
            }

        }
    }
    completion()
}) { (error) in
    print(error.localizedDescription)
    completion()
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...