我最近在我的代码中发现了一些奇怪的东西,我在同一个项目中编程了几天,但突然间我尝试用这段代码创建一个懒惰的属性:
import UIKit
class CategoryViewController: UICollectionViewController {
lazy var searchController: UISearchController = {
let searchController = UISearchController(searchResultsController: nil)
searchController.searchBar.frame = CGRect(x: 0, y: 0, width: CGRectGetWidth(self.collectionView.frame), height: 44)
return searchController
}()
}
现在,每当我尝试在惰性块中引用self时,它就会生成:
self.(<#NSObject#>)
并且无法访问其他任何属性。
如果我尝试对它们进行硬编码,则会产生:
UICollectionView? does not have a member named 'frame'
上面的代码显示:
Extra argument 'width' in call
我已经尝试重写代码并消除派生数据,再次构建但错误仍然存在。关于它为什么会发生的任何想法?
提前致谢
更新自动填充框:
答案 0 :(得分:1)
UICollectionView?没有名为'frame'的成员
看问号?这意味着这是一个可选项。在打开包装之前,您无法向Optional发送任何消息。所以解开它:self.collectionView!.frame
编辑以前的工作原理,然后你的代码坏了,是Swift API发生了变化。 Apple做了很多这样的事情,所以你必须“随心所欲”。每次升级Xcode时,您都需要准备好让代码中断。关于UICollectionViewController的collectionView
是否应该是可选的,他们已经三次改变主意。我完全不相信他们的答案是正确的。
进一步修改显示自动完成功能: