I want to replace the original tableview with collectionview, the code of the original tableview:
let selectedRow = MarketView.indexPathForSelectedRow!.row
I'm learning online to change to this code and I get an error:
let selectedRow = MarketView.indexPathsForSelectedItems!.first
The error shows: Cannot convert value of type 'IndexPath?' to expected argument type 'Int' This is the complete code as shown in the figure
I just learned to use collectionview, how should I modify it, thank you for your help
CodePudding user response:
Unlike indexPathForSelectedRow
which returns a single index path indexPathsForSelectedItems
returns an array of index paths
And row
is not first
, the collection view equivalent of row
– as the name of the API implies – is item
, you have to write indexPathsForSelectedItems!.first!.item
.
But it's not recommended to force unwrap the objects. A safer way is
guard let selectedRow = MarketView.indexPathsForSelectedItems?.first?.item else { return }