<div dir="ltr">Why not use the <a href="https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html" target="_blank">Designated Initializers and Convenience Initializers</a> ?<br><div><br></div><div></div><div dir="ltr"><div><div>    private var videoPlayer: AVPlayer</div><div>    private var videoPlayerLayer: AVPlayerLayer</div><div><span style="line-height:1.5">    </span><br></div></div></div><div dir="ltr"><div><div>    required override init(){ // &lt;-- commonInitialization()</div><div>        videoPlayer = AVPlayer()</div><div>        videoPlayerLayer = AVPlayerLayer()</div><div>        super.init()</div><div>    }</div><div>    </div><div>    convenience init?(coder decoder: NSCoder) {</div><div>        self.init();</div></div></div><div dir="ltr"><div><div>    }</div><br><div class="gmail_quote"><div dir="ltr">Em qui, 28 de abr de 2016 às 12:36, Shannon Potter via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; escreveu:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Consider a relatively-common init pattern:<br>
<br>
class SomeViewController: UIViewController {<br>
<br>
    // MARK: Properties<br>
<br>
    private var videoPlayer: AVPlayer<br>
    private var videoPlayerLayer: AVPlayerLayer<br>
<br>
    // MARK: - Object Lifecycle<br>
<br>
    override init(nibName: String?, bundle nibBundle: NSBundle?) {<br>
        super.init(nibName: nibName, bundle: nibBundle)<br>
<br>
        commonInitialization()<br>
    }<br>
<br>
    required init?(coder decoder: NSCoder) {<br>
        super.init(coder: decoder)<br>
<br>
        commonInitialization()<br>
    }<br>
<br>
    private func commonInitialization() {<br>
        videoPlayer = AVPlayer(...)<br>
        videoPlayerLayer = AVPlayerLayer(player: videoPlayer)<br>
    }<br>
<br>
}<br>
<br>
This does not work. Both properties are non-optional, and the compiler complains that they are not initialized in either init method. It seems rather common to want a single point of contact regarding object initialization, regardless of the path taken to initialize that object. Ideally, objects could all be funneled to one designated initializer, but this isn’t always the case.<br>
<br>
What are people’s thoughts about either a specialized function that is always called at the very end of each object’s lifecycle OR some sort of attribute for a function that hints that the compiler should follow it if called in an init function to check for property initialization?<br>
<br>
func commonInit() {<br>
<br>
}<br>
<br>
or<br>
<br>
@extend_init private func commonInitialization() {<br>
<br>
}<br>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote></div></div></div></div>