快速展开函数 3

Posted

技术标签:

【中文标题】快速展开函数 3【英文标题】:unwrapping a function swift 3 【发布时间】:2017-06-28 04:14:35 【问题描述】:

对于我的一生,我无法弄清楚为什么我不能让这个函数工作以响应indexPath 被选中。

当我在didSelectItemAtIndexPath 的行中添加断点时,它会中断,但是当我在viewscontroller 类中添加一个断点时,它不会中断。就好像信息正在发送,但无法到达目的地。我的控制台没有出现任何错误,而且我已经多次查看了所有内容。

这可能是一个 xcode 错误还是我错过了什么?

这里是我引用它所在的类的地方

var viewsController: ViewsController?

这是我的didSelectItemAtIndexPath

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 

    viewsController?.scrollToMenuIndex(indexPath.item)
    print(indexPath.item)


这是函数本身

func scrollToMenuIndex(_ menuIndex: Int) 
    let indexPath = IndexPath(item: menuIndex, section: 0)
    collectionView?.scrollToItem(at: indexPath, at: UICollectionViewScrollPosition(), animated: true)


【问题讨论】:

一切正常,就好像我无法分离数据一样。 *请注意,这是在没有故事板的情况下以编程方式完成的。 如果 scrollToMenuInde​​x 属于同一类,那么 scrollToMenuInde​​x(indexPath.item) 就足够了!! 【参考方案1】:

您的viewsController 已声明但未初始化。所以不知道调用了哪个类方法。

var viewsController: ViewsController?

如果scrollToMenuIndex 在同一个班级,只需scrollToMenuIndex(indexPath.item) 就足够了!!如果不在同一个视图控制器中,则需要将viewsController初始化为

 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
     let storyboard = UIStoryboard(name: "MyStoryboardName", bundle: nil)
     let viewsController= storyboard.instantiateViewController(withIdentifier: "someViewController")
     viewsController?.scrollToMenuIndex(indexPath.item)
     print(indexPath.item)
  

希望对您有所帮助。快乐编码!

【讨论】:

viewsController 是我的 rootViewController 所在的位置。我正在尝试构建的是一个类似于 youtube 标签栏的控制器。因此,您在选项卡栏中选择一个单元格,它将集合视图滚动到适当的单元格。这是两种不同类型的 UICollectionViewCell,位于不同类中的两个独立视图控制器中。 你的viewsController初始化了吗??【参考方案2】:

有效时的引用为viewsController返回nil。

因此,在引用集合视图的闭包中,该集合视图包含我用于 didSelectItemAtIndexPath(位于 viewsController 中)的单元格,

我必须添加 c.viewsController = self 并修复它。

我将不得不看一下文档对此的说明。如果还没有人解释这种行为,我会更新我的答案。

【讨论】:

以上是关于快速展开函数 3的主要内容,如果未能解决你的问题,请参考以下文章

笔记快速理解傅里叶级数

笔记快速理解傅里叶级数

关于C++内联函数

无穷数级(后篇)

dtb展开成device_node

用对象展开来写对象操作的纯函数