Ios 基于customObject属性的订单集合视图单元格-Swift 4-Xcode 9
我目前正在使用AlamofireImage从firebase下载我的图像。图像进入集合视图,图像的顺序很重要。我已经做了,所以每张照片都有一个标签 下面是我的照片课:Ios 基于customObject属性的订单集合视图单元格-Swift 4-Xcode 9,ios,arrays,swift,uicollectionview,Ios,Arrays,Swift,Uicollectionview,我目前正在使用AlamofireImage从firebase下载我的图像。图像进入集合视图,图像的顺序很重要。我已经做了,所以每张照片都有一个标签 下面是我的照片课: class businessPhoto { var image = UIImage() var url = String() var tag = Int() } 我知道Alamofire是异步的。下载完成后,我在排序阵列时遇到问题 (与下载实际完成与for循环完成有关) 以下是我得到的: 这就是我需要的: 我的代码:
class businessPhoto {
var image = UIImage()
var url = String()
var tag = Int()
}
我知道Alamofire是异步的。下载完成后,我在排序阵列时遇到问题
(与下载实际完成与for循环完成有关)
以下是我得到的:
这就是我需要的:
我的代码:
// Creates an Array of URLS
func createURLArray() {
if selectedBusiness.image1URL?.isEmpty == false {
imageURLS.append(selectedBusiness.image1URL!)
} else {
let placeholder = "--"
imageURLS.append(placeholder)
}
if selectedBusiness.image2URL?.isEmpty == false {
imageURLS.append(selectedBusiness.image2URL!)
} else {
let placeholder = "--"
imageURLS.append(placeholder)
}
if selectedBusiness.image3URL?.isEmpty == false {
imageURLS.append(selectedBusiness.image3URL!)
} else {
let placeholder = "--"
imageURLS.append(placeholder)
}
if selectedBusiness.image4URL?.isEmpty == false {
imageURLS.append(selectedBusiness.image4URL!)
} else {
let placeholder = "--"
imageURLS.append(placeholder)
}
if selectedBusiness.image5URL?.isEmpty == false {
imageURLS.append(selectedBusiness.image5URL!)
} else {
let placeholder = "--"
imageURLS.append(placeholder)
}
if selectedBusiness.image6URL?.isEmpty == false {
imageURLS.append(selectedBusiness.image6URL!)
} else {
let placeholder = "--"
imageURLS.append(placeholder)
}
if selectedBusiness.image7URL?.isEmpty == false {
imageURLS.append(selectedBusiness.image7URL!)
} else {
let placeholder = "--"
imageURLS.append(placeholder)
}
downloadImages(URLArray: imageURLS)
}
// ** Image Download
func downloadImages(URLArray: [String]) {
for stringURL in URLArray {
// Temporary Object
let object = businessPhoto()
//Sets tag for object
if stringURL == imageURLS[0] {
object.tag = 1
} else if stringURL == imageURLS[1] {
object.tag = 2
} else if stringURL == imageURLS[2] {
object.tag = 3
} else if stringURL == imageURLS[3] {
object.tag = 4
} else if stringURL == imageURLS[4] {
object.tag = 5
} else if stringURL == imageURLS[5] {
object.tag = 6
} else if stringURL == imageURLS[6] {
object.tag = 7
}
if stringURL == "--" {
} else {
// Downloads Image
let url = URL(string: stringURL)
Alamofire.request(url!).responseImage { response in
if let image = response.result.value {
DispatchQueue.main.async {
object.image = image
object.url = stringURL
self.currentImages.append(object)
self.photoCollectionView.reloadData()
}
} else {
object.image = #imageLiteral(resourceName: "image-failed")
object.url = "--"
self.currentImages.append(object)
//self.photoCollectionView.reloadData()
}
}
}
}
//completion()
}
//This function should update the collection view to show the photos sorted by their tag but does nothing
func updateCollectionView() {
print("UPDATING COLLECTION VIEW")
print(currentImages)
currentImages.sort(by: { $0.tag > $1.tag })
self.photoCollectionView.reloadData()
}
在我看来,让它有一个正确的顺序。跟我走
- 创建
,如果它不存在,则在方法self.currentImages
的开头创建7个空downloadImages
UIImage
- 使用
代替self.currentImages.insert(object,atIndex:object.tag)
self.currentImages.append(object)
func checkAndAddUrl(url : String) {
if url?.isEmpty == false {
imageURLS.append(url!)
} else {
let placeholder = "--"
imageURLS.append(placeholder)
}
}
func createURLArray() {
checkAndAddUrl(selectedBusiness.image1URL)
checkAndAddUrl(selectedBusiness.image2URL)
checkAndAddUrl(selectedBusiness.image3URL)
checkAndAddUrl(selectedBusiness.image4URL)
checkAndAddUrl(selectedBusiness.image5URL)
checkAndAddUrl(selectedBusiness.image6URL)
checkAndAddUrl(selectedBusiness.image7URL)
downloadImages(URLArray: imageURLS)
}
// ** Image Download
func downloadImages(URLArray: [String]) {
for stringURL in URLArray {
// Temporary Object
let object = businessPhoto()
object.tag = URLArray.indexOf(stringURL)
if stringURL == "--" {
} else {
// Downloads Image
let url = URL(string: stringURL)
Alamofire.request(url!).responseImage { response in
if let image = response.result.value {
DispatchQueue.main.async {
object.image = image
object.url = stringURL
self.currentImages.append(object)
self.photoCollectionView.reloadData()
}
} else {
object.image = #imageLiteral(resourceName: "image-failed")
object.url = "--"
self.currentImages.append(object)
//self.photoCollectionView.reloadData()
}
}
}
}
//completion()
}
//This function should update the collection view to show the photos sorted by their tag but does nothing
func updateCollectionView() {
print("UPDATING COLLECTION VIEW")
print(currentImages)
currentImages.sort(by: { $0.tag > $1.tag })
self.photoCollectionView.reloadData()
}
啊,是的,这很有道理。我试试这个。如果行得通,我会接受你的回答。如果你做不到,请告诉我。我将向您展示代码不起作用的原因;)@再一次,您不需要使用
if
来检查和设置对象的标记。让我们在URLArray
中获取stringURL
的索引,并为对象的标记设置它。是分拣机和清洗器有更好的方法吗?如果是这样,我很想知道。我知道我的方法非常重复。@27我已经更新了我的答案。您可以使用“编辑”再次检查它。希望它能帮助您改进代码。
func checkAndAddUrl(url : String) {
if url?.isEmpty == false {
imageURLS.append(url!)
} else {
let placeholder = "--"
imageURLS.append(placeholder)
}
}
func createURLArray() {
checkAndAddUrl(selectedBusiness.image1URL)
checkAndAddUrl(selectedBusiness.image2URL)
checkAndAddUrl(selectedBusiness.image3URL)
checkAndAddUrl(selectedBusiness.image4URL)
checkAndAddUrl(selectedBusiness.image5URL)
checkAndAddUrl(selectedBusiness.image6URL)
checkAndAddUrl(selectedBusiness.image7URL)
downloadImages(URLArray: imageURLS)
}
// ** Image Download
func downloadImages(URLArray: [String]) {
for stringURL in URLArray {
// Temporary Object
let object = businessPhoto()
object.tag = URLArray.indexOf(stringURL)
if stringURL == "--" {
} else {
// Downloads Image
let url = URL(string: stringURL)
Alamofire.request(url!).responseImage { response in
if let image = response.result.value {
DispatchQueue.main.async {
object.image = image
object.url = stringURL
self.currentImages.append(object)
self.photoCollectionView.reloadData()
}
} else {
object.image = #imageLiteral(resourceName: "image-failed")
object.url = "--"
self.currentImages.append(object)
//self.photoCollectionView.reloadData()
}
}
}
}
//completion()
}
//This function should update the collection view to show the photos sorted by their tag but does nothing
func updateCollectionView() {
print("UPDATING COLLECTION VIEW")
print(currentImages)
currentImages.sort(by: { $0.tag > $1.tag })
self.photoCollectionView.reloadData()
}