【问题标题】:Downcast from '[UICollectionViewLayoutAttributes]?' to '[UICollectionViewLayoutAttributes]' only unwraps optionals从“[UICollectionViewLayoutAttributes] 向下转换?”到 '[UICollectionViewLayoutAttributes]' 只解开可选项
【发布时间】:2016-03-15 01:58:03
【问题描述】:

我正在尝试构建一个带有分页的集合视图(将单元格显示为预览)并找到this 教程。我从 Xcode 收到错误,猜测这一定是由于 Xcode 的更新(因为该教程似乎对很多人都有效)。希望得到有关如何解决此问题的提示:

来自“[UICollectionViewLayoutAttributes]?”的向下转换到 '[UICollectionViewLayoutAttributes]' 仅解开可选项;你是否 意思是使用'!'?

【问题讨论】:

  • 你能贴出代码吗?
  • Here 就是一个例子!

标签: swift collectionview


【解决方案1】:

你可能做了这样的事情(someOptionalAttributes[UICollectionViewLayoutAttributes]? 类型):

someOptionalAttributes as! [UICollectionViewLayoutAttributes]

但是,因为someOptionalAttributes 只是[UICollectionViewLayoutAttributes] 的可选版本,所以不需要强制向下转换,只需要解包即可:

someOptionalAttributes!

只有在转换为全新类型(通常是子类)时才需要强制向下转换。

所以,是的,你的意思是使用!,如错误中所述。如果您想安全起见,可以使用多种不同的可选展开技术。

【讨论】:

  • 谢谢!我尝试将该行修改为“if let attributesForVisibleCells = self.layoutAttributesForElementsInRect(cvBounds)!”但后来我得到这个错误:条件绑定的初始化程序必须具有可选类型,而不是'[UICollectionViewLayoutAttributes]'
  • @moopoints 啊,因为当你使用if let时,你不需要强制向下转换。只需将其更改为 if let attributesForVisibleCells = self.layoutAttributesForElementsInRect(cvBounds) — 没有 !
  • 完成!再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多