如何获取或设置扩展内部/外部的值

问题描述

我是 Swift 的新手,我想了解一个类如何在扩展中获取值。

我有两个问题,但它们彼此相似,但首先我将解释我的项目。我正在使用 2 个控制器(MainViewControllerFactsViewController),我们可以说第一个控制器和第二个控制器。第三个文件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 来转移到那里?此外,正如我提到的两个问题,我如何总结 lbFactsTextlbCategories 的所有高度以返回 UICollectionViewDelegateFlowLayout。我真的很困惑,我听说objc_setAssociatedobjectobjc_getAssociatedobject可以做到这一点但我不明白如何使用它,这两种方法真的是正确的方法吗?我从这个网站得到:https://marcosantadev.com/stored-properties-swift-extensions/

如果您需要我列出扩展的完整详细信息,请告诉我。

解决方法

基于@Joakim Danielson,它奏效了。我必须在我的控制器类上编写一个属性来存储扩展中的值。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...