【发布时间】:2020-01-03 13:41:10
【问题描述】:
我对 swift 和整体编程相当陌生,我有一些代码将循环通过一个硬编码的数量来表示帖子(这将始终保持不变,所以我对其进行了硬编码)并运行一个带有位置的函数当前 while 循环到达的位置返回从 firebase 下载的缓存视频文件的 URL 字符串。每当返回 10 个帖子的 URL 时,它都会被附加到一个数组中,该数组最后应该包含 10 个字符串,这些字符串都是存储在设备上的不同视频的唯一 URL:
var fileArray = [String]()
func getPosts(){
var pos = 0
let numOfPosts = 10
while pos <= numOfPosts{
FeaturedPostsManager.shared.getFeaturedPosts(index: pos, completion: { url in
if url != nil{
self.fileArray.append(url!)
}else{
print("error")
}
})
pos += 1
}
performSegue(withIdentifier: "showHome", sender: nil)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let recveiverVC = segue.destination as! HomeViewController
recveiverVC.fileArray = fileArray
}
我的问题是 performSegue(withIdentifier: "showHome", sender: nil) 似乎在数组中甚至有一个 url 值之前就被执行了,正如我在控制台中看到的那样,正在成功检索 URL,只是在我的 HomeViewController 中,我的数组返回空。我是否需要某种异步函数来只允许 performSegue(withIdentifier: "showHome", sender: nil) 代码在 while 循环完成并因此拥有完整的 url 数组时执行?
谢谢,
内森
【问题讨论】:
-
不相关,但
while循环非常麻烦。将其替换为for pos in 0..<numOfPosts {…并删除要声明和递增pos的行。