我正在尝试将集合视图中所选单元格的indexPath.row发送到目标控制器(详细视图),到目前为止我已完成以下操作
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
let recipeCell: Recipe!
recipeCell = recipe[indexPath.row]
var index: Int = indexPath.row
performSegueWithIdentifier("RecipeDetailVC", sender: recipeCell)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "RecipeDetailVC" {
let detailVC = segue.destinationViewController as? RecipeDetailVC
if let recipeCell = sender as? Recipe {
detailVC!.recipe = recipeCell
detailVC!.index = index
}
}
}
indexPath.row是一种NSIndexPath,所以我试图转换为Int,但我在运行时得到Cannot assign value of type '(UnsafePointer<Int8>,Int32) -> UnsafeMutablePointer<Int8>' to type 'Int'
在目标视图控制器中,我已初始化var index = 0
接收indexPath.row值
知道为什么我在运行时遇到这个错误吗?
答案 0 :(得分:1)
它是一个collectionView所以我相信你应该使用indexpath.item而不是.row
答案 1 :(得分:1)
didSelectItemAtIndexPath
中有以下一行:
var index: Int = indexPath.row
这声明index
仅作为此函数的本地。然后在prepareForSegue
中你有:
detailVC!.index = index
由于您没有收到编译错误,因此还必须在其他地方定义index
。这是didSelectItemAtIndexPath
应该设置的其他变量。它可能只是
index = indexPath.row
答案 2 :(得分:1)
将以下内容移出函数并将其设为属性。
var index: Int = indexPath.row
在prepareForSegue中,您有以下内容:
detailVC!.index = index
变量'index'未在类中或本地声明,因此您获得的是名为'index'的函数,其定义为:
func index(_: UnsafePointer<Int8>, _: Int32) -> UnsafeMutablePointer<Int8>
如果你将'index'作为一个属性,它将被用来代替同名函数。
答案 3 :(得分:0)
另一种解决方案可能是:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "RecipeDetailVC" {
let detailVC = segue.destinationViewController as? RecipeDetailVC
if let recipeCell = sender as? Recipe {
detailVC!.recipe = recipeCell
detailVC!.index = collectionView.indexPathsForSelectedItems()?.first?.item
}
}
}