首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更新数组swift 4

更新数组swift 4
EN

Stack Overflow用户
提问于 2018-12-07 16:42:47
回答 2查看 305关注 0票数 0

我正在尝试通过从firebase数据库下载图像来更新图像数组。但是由于某些原因,在函数内部更新数组后,在viewdidload函数中不会更新数组。我是xcode的新手。有什么想法吗?

代码语言:javascript
运行
复制
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)
    }

}
EN

回答 2

Stack Overflow用户

发布于 2018-12-07 16:55:07

因为observeSingleEvent是异步运行的,所以在observeSingleEvent结束之前调用打印函数。你可以像这样修复它,使用闭包

代码语言:javascript
运行
复制
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()
}
}
票数 2
EN

Stack Overflow用户

发布于 2018-12-07 18:43:02

您可以像这样使用

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53665970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档