ここに状況があります。私はプロトコルとその拡張機能を持っています。プロトコル指向プログラミング拡張変数init 2回
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を、私は私のViewControllerのビューにこのカスタム「aView」を追加し、このプロトコルに準拠するために作ります。
class MyVC: UIViewController, CustomViewAddable {
override func viewDidLoad() {
super.viewDidLoad()
setupCustomView()
}
}
私はそれを実行します。私のコンソールログでは、initの2回印刷し、カスタム 'aView'で何かをしようとしていて、失敗しました。 (上に貼り付けたコードで、簡略化して自分の意図を表示するのがとても簡単になるでしょう)
誰かがなぜそれを説明するか、それに私が非常に感謝してくれるものを作ることができますか?
あなたの 'print(" aView:\(_ aView) ")'が2回印刷されることを意味しましたか? –