这是情况。我有一个协议,以及它的扩展。
protocol CustomViewAddable {
var aView: UIView { get }
var bView: UIView { get }
func setupCustomView()
}
extension CustomViewAddable where Self: UIViewController {
var aView: UIView {
let _aView = UIView()
_aView.frame = self.view.bounds
_aView.backgroundColor = .grey
// this is for me to observe how many times this aView init.
print("aView: \(_aView)")
return _aView
}
var bView: UIView {
let _bView = UIView(frame: CGRect(x: 30, y: 30, width: 30, height: 30))
_bView.backgroundColor = .yellow
return _bView
}
func setupCustomView() {
view.addSubview(aView);
aView.addSubview(bView);
}
}
我制作了一个 ViewController 来符合这个协议,然后我将这个自定义的“aView”添加到我的 ViewController 的视图中。
class MyVC: UIViewController, CustomViewAddable {
override func viewDidLoad() {
super.viewDidLoad()
setupCustomView()
}
}
我运行它。在我的控制台日志中,它打印了两次 init,我试图在我的自定义“aView”中做某事,但它失败了。(我在上面粘贴的代码进行了简化,以便很容易地表达我的意图)
任何人都可以解释原因或对其进行修复,我将不胜感激。