我正在尝试从 swift 4 中的 UICollectionView 生成一个选定值的数组。我使用将self.collectionView.indexPathsForSelectedItems
选定项作为索引路径类型的数组返回的方法。例如,如果选择了元素 0 和 2,它将返回 [[0, 0], [0, 2]] 我想知道如何将其处理为 Int 类型的数组以将其存储为 [0,2] .
我已经尝试了几个小时,任何帮助将不胜感激,谢谢。
我正在尝试从 swift 4 中的 UICollectionView 生成一个选定值的数组。我使用将self.collectionView.indexPathsForSelectedItems
选定项作为索引路径类型的数组返回的方法。例如,如果选择了元素 0 和 2,它将返回 [[0, 0], [0, 2]] 我想知道如何将其处理为 Int 类型的数组以将其存储为 [0,2] .
我已经尝试了几个小时,任何帮助将不胜感激,谢谢。
您可以为此使用地图功能:
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 }
使用 compactMap 更干净。
let newIndexedData = collectionView.indexPathsForSelectedItems?.compactMap { yourArray[$0.row] } ?? []
上面的答案是绝对正确的!这是同一件事,但对于不熟悉地图功能的人来说,版本更长,也许更容易理解
let indexes = collectionView.indexPathsForSelectedItems?.map { (indexPath) -> Int in
return indexPath.item }
您可以通过以下方式轻松获得它map
:
let arrayOfIndexPathItems = self.collectionView.indexPathsForSelectedItems?.map({ $0.item })
请务必使用item
的 s 属性IndexPath
,因为您正在使用collectionView
.