I like the `defer init` idea but suggest you have to explicitly call it at the end of all the other non-convenience `init`s. The advantage of an explicit call are two fold:
1. It is obvious what is happening 2. You can pass arguments On Friday, 29 April 2016, Basem Emara via swift-evolution < [email protected]> wrote: > I see what you’re saying and the forced optionals is pretty inconvenient. > > As far as syntax, how about more of a “deferred” init that gets triggered > regardless like this: > > defer init() { > // Always gets called no matter what designated init triggers > } > > > On Apr 27, 2016, at 5:52 PM, Shannon Potter via swift-evolution < > [email protected] <javascript:;>> wrote: > > > > Consider a relatively-common init pattern: > > > > class SomeViewController: UIViewController { > > > > // MARK: Properties > > > > private var videoPlayer: AVPlayer > > private var videoPlayerLayer: AVPlayerLayer > > > > // MARK: - Object Lifecycle > > > > override init(nibName: String?, bundle nibBundle: NSBundle?) { > > super.init(nibName: nibName, bundle: nibBundle) > > > > commonInitialization() > > } > > > > required init?(coder decoder: NSCoder) { > > super.init(coder: decoder) > > > > commonInitialization() > > } > > > > private func commonInitialization() { > > videoPlayer = AVPlayer(...) > > videoPlayerLayer = AVPlayerLayer(player: videoPlayer) > > } > > > > } > > > > 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. > > > > 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? > > > > func commonInit() { > > > > } > > > > or > > > > @extend_init private func commonInitialization() { > > > > } > > _______________________________________________ > > swift-evolution mailing list > > [email protected] <javascript:;> > > https://lists.swift.org/mailman/listinfo/swift-evolution > > _______________________________________________ > swift-evolution mailing list > [email protected] <javascript:;> > https://lists.swift.org/mailman/listinfo/swift-evolution > -- -- Howard.
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
