【发布时间】:2017-01-13 03:01:51
【问题描述】:
情况是这样的。我有一个协议和它的扩展。
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”中做某事,但它失败了。 (我在上面粘贴的代码我简化了,这样很容易显示我的意图)
谁能解释原因或修复它,我将不胜感激。
【问题讨论】:
-
你的意思是你的
print("aView: \(_aView)")会打印两次?
标签: swift swift-protocols protocol-extension protocol-oriented