Swift-将索引路径数组转换为Int数组

时间:2018-02-09 13:29:29

标签: ios arrays swift uicollectionview indexpath

我试图从swift 4中的UICollectionView生成一个选定值数组。我使用self.collectionView.indexPathsForSelectedItems方法将所选项作为类型索引路径数组返回。例如,如果选择了元素0和2,则返回[[0,0],[0,2]]我想知道如何将其处理为Int类型的数组以将其存储为[0, 2]。

我已经尝试了几个小时,任何帮助都会非常感激,谢谢。

4 个答案:

答案 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] } ?? []