使用插入式闭包[Swift]
在我的swift应用程序中,我具有以下功能:使用插入式闭包[Swift],swift,break,Swift,Break,在我的swift应用程序中,我具有以下功能: func getImages() { var i = 0 K: while (true) { let downloadURL = URL(string: "serverURL") Database.downloadImage(withURL: downloadURL!) { (image) in if image == nil { break } s
func getImages() {
var i = 0
K: while (true) {
let downloadURL = URL(string: "serverURL")
Database.downloadImage(withURL: downloadURL!) { (image) in
if image == nil { break }
self.imagesArray.append(image!)
self.collectionView?.reloadData()
i += 1
}
}
}
这个想法是从服务器获取图像,但我不知道图像的确切数量。
但这是检查nil值的if语句的错误:
未标记的“中断”仅允许在环路或交换机内部使用,需要标记的中断才能退出if或do
如何解决,是否需要知道图像的数量以限制循环?设计知道图像的数量非常重要,您可以使用此选项
func getImages(_ i:Int) {
let downloadURL = URL(string: "serverURL")
Database.downloadImage(withURL: downloadURL!) { (image) in
if let img = image {
self.imagesArray.append(img)
self.collectionView?.reloadData()
getImages(i+1)
}
else {
print("image is nil final call")
}
}
}
}
也可能是下载依赖于i,因为不进行无限循环请勿在此处使用
while(true)
循环。在第一次下载完成之前,它将启动数千次下载。我必须使用什么?正如rmaddy所说,您的代码是一个火车残骸,不可能正常工作。不要使用这种方法@Sh_Khan的方法是可行的。所以你试图下载相同的图像i
多次,直到最终失败?我不明白,你想做什么?@Alexander我不认为是这样的,因为这是毫无意义的。这种连续下载也是非常不理想的。旁注,不要做!=无
<代码>代码>。只需使用条件绑定即可。@Alexander每次下载都应该依赖于i,因为下载次数未知,所以这是一种直接的方法,我无法初始化未知结果的并发请求,是的,如果让我们在这里,因为我想解决主要问题case@Sh_Khan这个问题只需要OP提出更明确的要求。尽管如此,这还是可以通过将其分为批n
并发下载,并在下载后丢弃任何不想要的结果来改进。它会导致一些无关的下载,但会加快总时间n
次。