为什么我不能直接设置一些类的属性?

问题描述 投票:0回答:1

这可能是我这边的一些误解,但我不明白为什么不能这样做。

我已经创建了一个UITableViewCell子类,像这样。

class MenuCell: UITableViewCell {

var mcImage: String
var mcLabel: String

init(mcImage: String, mcLabel: String) {
    self.mcImage = mcImage
    self.mcLabel = mcLabel

    super.init(style: .default, reuseIdentifier: "reuseIdentifier")

    setupView()
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

func setupView() {
    let mcImageView   = UIImageView()
    let mcLabelView   = UILabel()

    mcImageView.image         = UIImage(systemName: mcImage)
    mcLabelView.text          = mcLabel

    // Rest of setup (font, colors, positions...)

    addSubview(mcImageView)
    addSubview(mcLabelView)
}}

如果在我的ViewController中我写:

var firstCell = MenuCell(mcImage: "plus.circle", mcLabel: "Some text")

它创建了对象,并且运行得很好,我可以访问我的对象属性, 但为什么我不能设置这样的属性呢?

firstCell.mcImage = "plus.circle"   // This doesn't work

它只是忽略我,但我可以设置任何UITableViewCell属性。

firstCell.accessoryType = .none   // This works
swift xcode class properties subclass
1个回答
2
投票

它将设置 mcImage 到 "plus.circle",但你看不到影响......因为你没有调用 setupView() 在给它赋值之后......在 setupView() 你使用这个值来创建这个图片的imageView函数。

你可以像这样编辑你的班级

     class MenuCell: UITableViewCell {

         private let mcImageView   = UIImageView()
         private let mcLabelView   = UILabel()


            var mcImage: String {
                didSet{
                    self.mcImageView.image  = UIImage(systemName: mcImage)
                }
            }
        var mcLabel: String {
            didSet{
                self.mcLabelView.text = mcLabel
            }
        }

    init(mcImage: String, mcLabel: String) {
        self.mcImage = mcImage
        self.mcLabel = mcLabel


        super.init(style: .default, reuseIdentifier: "reuseIdentifier")
        addSubview(mcImageView)
        addSubview(mcLabelView)
        setupView()
    }
    func setupView() {


        // Rest of setup (font, colors, positions...)


    }
override func prepareForReuse() {
        super.prepareForReuse()
        mcImageView.image = nil
        mcLabelView.text = ""
    }

        }

这样每次你设置图像字符串的值时...它就会刷新你的视图。

© www.soinside.com 2019 - 2024. All rights reserved.