SWIFT 从 VC 向 UIView 传递参数让我抓狂

SWIFT passing parameter from VC to UIView drives me nuts

从昨天开始,我一直在努力完成这项工作,但没有任何方法成功。虽然我学到了很多东西,但似乎仍然缺少一些基础知识。

我有一个视图控制器,它应该在堆栈中包含多个子视图。每个子视图应在单独的 swift 文件中使用相同的 UIView class。但是,对于每个子视图,我想将位置 ID 传递给 UIView class。控制器和子视图是使用故事板创建的。

所以我最新最好的方法是

class SpatialViewController: UIViewController {
   @IBOutlet var redSquare: SpatialProblemView!
   @IBOutlet var blueSquare: SpatialProblemView!

   override func viewDidLoad() {
       super.viewDidLoad()
   
       redSquare = SpatialProblemView(subviewName: "red")
       blueSquare = SpatialProblemView(subviewName: "blue")
   //  redSquare.subviewName = "red"
    
       self.view.addSubview(redSquare)
   }
}

class SpatialProblemView: UIView {
   var subviewName: String

   init(subviewName: String){
       self.subviewName = subviewName
       super.init(frame: CGRect.zero)
   }
   required init?(coder aDecoder: NSCoder) {
       super.init(coder: aDecoder)
   }
}

我也试过用这个编写 UIView 代码

required init(subviewName: String) {
    super.init(frame: .zero)
    self.subviewName = subviewName
    self.setup()
}

required override init(frame: CGRect) {
    super.init(frame: frame)
    self.setup()
}

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

func setup() {
    if subviewName == "red" {
        print ("red")
    }
}

但这似乎与 运行 代码相去甚远。使用 upper UIView 定义,我收到错误 Fatal error: init(coder:) has not been implemented in the console and 属性 'self.subviewName' 未在 super.init 编辑器内联调用 处初始化。两者都与

有关
super.init(coder: aDecoder)

我在这里查找了有关此错误消息的其他帖子,但 none 我看到了帮助。非常感谢任何帮助:-)

尽量让它成为可选的

 var subviewName: String?

如果你将它们作为出口,那么你不应该在这里分配一个新实例

SpatialProblemView(subviewName: "red")

只需分配 属性

redSquare.subviewName = "red"