我试图从swift 4中的UICollectionView生成一个选定值数组。我使用self.collectionView.indexPathsForSelectedItems
方法将所选项作为类型索引路径数组返回。例如,如果选择了元素0和2,则返回[[0,0],[0,2]]我想知道如何将其处理为Int类型的数组以将其存储为[0, 2]。
我已经尝试了几个小时,任何帮助都会非常感激,谢谢。
答案 0 :(得分:3)
您可以使用地图功能:
guard let indexPaths: [IndexPath] = collectionView.indexPathsForSelectedItems else { return }
let indexes = indexPaths.map({ $0.item })
或强制打开:
let indexes = collectionView.indexPathsForSelectedItems!.map{ $0.item }
评论部分建议的另一个选项
let indexes = (collectionView.indexPathsForSelectedItems ?? []).map{ $0.row }
答案 1 :(得分:0)
您可以使用map
轻松搞定:
let arrayOfIndexPathItems = self.collectionView.indexPathsForSelectedItems?.map({ $0.item })
请务必使用item
的{{1}}属性,因为您正在使用IndexPath
。
答案 2 :(得分:0)
以上答案绝对正确!对于不熟悉地图功能的人来说,这是同样的事情,但可能更长,也许更容易理解的版本
let indexes = collectionView.indexPathsForSelectedItems?.map { (indexPath) -> Int in
return indexPath.item }
答案 3 :(得分:0)
使用compactMap更干净。
let newIndexedData = collectionView.indexPathsForSelectedItems?.compactMap { yourArray[$0.row] } ?? []