【问题标题】:didSet not working on variabledidSet 不适用于变量
【发布时间】:2017-09-22 14:26:16
【问题描述】:

我正在尝试将数据从我的 cellClass 传递到 viewController。我可以轻松地将标签文本从 cellClass 传递给 vc,但无法在 vc 中设置变量。

这是我的模型类:

class Item: NSObject {

    var itemId: String?
    var itemLabel: String?
 }

这是我的didSelectItem CellClass 代码:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

        if let item = item?[indexPath.item] {
            let vc = VC()
            vc.presentVC(launcher: vc)
            vc.item = item

            if let id = item.itemId {
                vc.itemId = id
            }
        }
    }

这里,presentVC 是我创建的用于展示 vc 的扩展。这就是我在 ViewController 中编写的内容:

class VC: UIViewController {

    var itemId = String()

    let itemLabel: UILabel = {
        let label = UILabel()
        label.text = "TEST TEST TEST"
        return label
    }()

    var item: Item? {
        didSet {
            itemLabel.text = item?.itemLabel

            if let id = item?.itemId {
                itemId = id
            }
        }
    }
}

因此,通过这样做,我可以从 cellClass 中获取 itemLabel,但现在已设置 id 并显示 nil。我该如何解决?

【问题讨论】:

    标签: swift uiviewcontroller uicollectionviewcell didset


    【解决方案1】:

    所以我以某种方式修复了它!问题是每次我在didSelectItem 上选择项目时,都会调用didSet 方法。所以我只是先创建了一个这样的方法:

    func setupId(item: Item) {
    
            var itemId = String()
    
            if let id = item.itemId {
                itemId = id
            }
    
            print(itemId)
        }
    

    而在didSet 中,我刚刚添加了这样的函数:

    var item: Item? {
            didSet {
                itemLabel.text = item?.itemLabel
                if let item = item {
                    setupId(item: item)
                }
            }
        }
    

    这几乎是解决办法!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 2020-01-17
      • 1970-01-01
      • 2018-10-04
      • 2020-02-01
      相关资源
      最近更新 更多