【问题标题】:Instantiate the delegate pattern one time or more in Swift?在 Swift 中实例化委托模式一次或多次?
【发布时间】:2020-12-21 10:49:41
【问题描述】:

我正在研究以下代码的 swift 委托模式。我不太确定如何使用此选项“无需重新实例化视图。

protocol ShapeViewDelegate {
    func drawShapeView(_ shapeView: ShapeView)
}

class ShapeView: UIView {
    var strokeColor: UIColor?
    var fillColor: UIColor?
    
    var delegate: ShapeViewDelegate? {
        didSet {
            setNeedsDisplay()
        }
    }
    
    override func draw(_ rect: CGRect) {
        delegate?.drawShapeView(self) // self means object( ShapeView() ) is it instantiated ?
    }
}

视图对象应该准备好来自委托对象,但我没有实例化它,使用协议实例化的这个对象在运行时自动实例化它。所以我正在写一个这样的例子:

class ShapeViewController: ShapeViewDelegate {
drawShapeView(view)
}

View是实例化的,也就是说本例占用了内存?

【问题讨论】:

    标签: ios swift delegates


    【解决方案1】:

    您必须在ShapeViewController 中定义drawShapeView()。在您的代码中,您正在使用或调用 drawShapeView(),这已经在您的 ShapeView 中被调用。关于实例化,是的,您需要在 ShapeViewController 或您确认委托的任何其他地方实例化 ShapeView

    ShapeViewController 中的代码 -

    class ShapeViewController: ShapeViewDelegate {
    
       override func viewDidLoad() {
        
          super.viewDidLoad()
      
          let shape = ShapeView(...)
          shape.delegate = self
          view.addSubView(shape)
       }
    
       func drawShapeView(_ shapeView: ShapeView) {
          //your code here
       }
    }
    

    通过此功能,您可以根据不同的ShapeViewController实例对ShapeView进行多种定义,而无需担心修改ShapeView

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 2023-04-07
      • 2011-06-23
      相关资源
      最近更新 更多