问题描述
我是 Swift 的新手,我想了解一个类如何在扩展中获取值。
我有两个问题,但它们彼此相似,但首先我将解释我的项目。我正在使用 2 个控制器(MainViewController 和 FactsViewController),我们可以说第一个控制器和第二个控制器。第三个文件是 CollectionViewCell
,因为我在我的项目中使用了集合视图。
因此,对于第一个问题,我尝试调用 prepareForSegue
方法将值发送到 FactsViewController。我已经完成了所有方法,但我不知道如何从扩展中收集 indexPath 以将正确的信息发送到我的第二个屏幕。这是我的 MainViewController 上的方法:
func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject!) {
let destinationVC = segue.destination as! FactViewController
// getting the value associated with a variable here on this line
destinationVC.receivedValue = // a possible variable with the right result
}
这是我的 CollectionViewCell
文件的样子:
class FactsCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var lbFactsText: UILabel!
@IBOutlet weak var lbCategories: UILabel!
func setup(with facts: FactsData?,index: Int) {
let result = facts!.result[index]
lbFactsText.text = result.value
print(result.value)
if let category = result.categories.first {
lbCategories.text = category!.uppercased()
lbCategories.sizetoFit()
} else {
lbCategories.text = "UNCATEGORIZED"
lbCategories.sizetoFit()
}
}
}
我不知道 StackOverFlow 是否会让我准确地列出所有代码,但这里是我正在使用的扩展列表:
extension MainViewController: UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView,numberOfItemsInSection section: Int) -> Int {
}
func collectionView(_ collectionView: UICollectionView,cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
}
}
extension MainViewController: UISearchBarDelegate {
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
}
}
extension MainViewController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView,layout collectionViewLayout: UICollectionViewLayout,sizeforItemAt indexPath: IndexPath) -> CGSize {
}
}
extension MainViewController: UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView,didSelectItemAt indexPath: IndexPath) {
}
}
(请注意,这些扩展方法中有代码,它只是列出空的,只是为了显示我正在使用的方法)。
例如,我怎样才能在我的 prepareForSegue
方法中获得一个 fact[result].value 来转移到那里?此外,正如我提到的两个问题,我如何总结 lbFactsText
和 lbCategories
的所有高度以返回 UICollectionViewDelegateFlowLayout
。我真的很困惑,我听说objc_setAssociatedobject
或objc_getAssociatedobject
可以做到这一点但我不明白如何使用它,这两种方法真的是正确的方法吗?我从这个网站得到:https://marcosantadev.com/stored-properties-swift-extensions/
如果您需要我列出扩展的完整详细信息,请告诉我。
解决方法
基于@Joakim Danielson,它奏效了。我必须在我的控制器类上编写一个属性来存储扩展中的值。