首页 > 解决方案 > 两个类使用相同的函数来创建自定义视图 - Swift

问题描述

我对 Swift 有点陌生,我无法弄清楚这一点。我有两个类,我需要使用相同的函数来设置自定义 UIStackVIew(显示评级星的评级控件)。每个类都有一个value需要在函数内部传递的变量。我不想在每个类中复制 setUpStackView 函数的相同代码。我有以下代码:

class Class1: UIStackView {

    var variable1 = "value1"

    override init(frame: CGRect){
      super.init(frame: frame)
    }

    required init?(coder aDecoder: NSCoder){
      super.init(coder: aDecoder)
    }

    setUpStackView(value: variable1)

}

class Class2: UIStackView {

    var variable2 = "value2"

    override init(frame: CGRect){
      super.init(frame: frame)
    }

    required init?(coder aDecoder: NSCoder){
      super.init(coder: aDecoder)
    }

    setUpStackView(value: variable2)

}




extension Class1 {

  func setUpStackView(value: String){
    //code to set UIStackView rating control and to use the variable value
  }

}

我怎样才能实现扩展Class2?我被这个困住了。任何帮助将不胜感激!

标签: swiftclassprotocolsextension-methods

解决方案


一种解决方案可以将公共代码移动到协议中,您可以在其中抽象出:

protocol  BaseStackView {
    var variable :String { get set }
}

class Class1: UIStackView,BaseStackView {



    var variable = "value1"

    override init(frame: CGRect){
      super.init(frame: frame)
        self.setUpStackView(value: variable)

    }

    required init(coder: NSCoder) {
        super.init(coder: coder)
        self.setUpStackView(value: variable)
    }
}

class Class2: UIStackView,BaseStackView {

    var variable = "value2"

    override init(frame: CGRect){
      super.init(frame: frame)
        self.setUpStackView(value: variable)
    }

    required init(coder: NSCoder) {
        super.init(coder: coder)
        self.setUpStackView(value: variable)
    }



}



extension UIStackView {
    func setUpStackView(value: String) {
        //Your setup here
    }
}

推荐阅读