ios – 无法在swift中的懒惰属性中引用self
发布时间:2020-12-14 19:08:02 所属栏目:百科 来源:网络整理
导读:我最近在我的代码中偶然发现了一些奇怪的东西,我在同一个项目中编程了几天,但突然间我尝试用这段代码创建一个懒惰的属性: import UIKitclass CategoryViewController: UICollectionViewController { lazy var searchController: UISearchController = { let
我最近在我的代码中偶然发现了一些奇怪的东西,我在同一个项目中编程了几天,但突然间我尝试用这段代码创建一个懒惰的属性:
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 我已经尝试重写代码并消除派生数据,再次构建但错误仍然存??在.关于它为什么会发生的任何想法? 提前致谢 更新自动填充框: 解决方法
看问号?这意味着这是一个可选项.在打开包装之前,您无法向Optional发送任何消息.所以解开它:self.collectionView!.frame 编辑之前这个工作原因,然后你的代码坏了,是Swift API发生了变化. Apple做了很多这样的事情,所以你必须“随心所欲”.每次升级Xcode时,您都需要准备好让代码中断.关于UICollectionViewController的collectionView是否应该是Optional,他们已经改变了三次思路.我完全不相信他们的答案是正确的. 进一步编辑显示自动完成工作: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |