<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">It seems to me that A should provide an `init(x: Int = 1) { self.x = x }` initializer in such case so B may call `super.init(x: 2)`. This initializer could even be made internal if necessary, but it honestly seems weird for a superclass to default initialize to a certain value and a subclass to default initialize to another.</div><div class=""><br class=""></div><div class="">Regardless, I definitely don’t think introducing unsafely is the right choice. If anything, there ought to be a compiler optimization (if there isn’t one already) that’ll eliminate these duplicate assignments—and I would bet there is if `super.init()` can be inlined.</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jan 28, 2017, at 10:07 AM, Victor Petrescu via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class="">Hello,<br class=""><br class=""></div>My name is Victor, been a developer (C, delphi, php, java, js) for the last 10 years or so and lately I had the chance to try swift. I have a suggestion/question regarding initializers.<br class=""><br class=""></div>Sidenote: If this is not the correct mailing list for this can you please redirect me to the right place?<br class=""><br class=""></div>Consider the following 2 classes and code:<br class=""><br class=""></div>class A {<br class=""></div>&nbsp;&nbsp;&nbsp;&nbsp; var x:Int<br class=""><br class=""></div>&nbsp;&nbsp;&nbsp;&nbsp; init() {<br class=""></div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x = 1<br class=""><div class="">&nbsp;&nbsp;&nbsp;&nbsp; }<br class=""><div class=""><div class="">}<br class=""><br class=""></div><div class="">class B : A {<br class=""></div><div class="">&nbsp;&nbsp;&nbsp; override init() {<br class=""></div><div class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.init() // Swift FORCES this call<br class=""></div><div class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x = 2<br class=""></div><div class="">&nbsp;&nbsp;&nbsp; }<br class=""></div><div class="">}<br class=""><br class=""></div><div class="">var a:B<br class=""></div><div class="">for i in 0...99999999 {<br class=""></div><div class="">&nbsp;&nbsp;&nbsp; a = B()&nbsp; // Whatever... some code that inits B.<br class=""></div><div class="">}<br class=""></div><div class=""><br class=""></div><div class="">This results in 99999999 x = 1 then 99999999 x = 2... the x = 1 being totally useless in this particular case.<br class=""><br class=""></div><div class="">In this case, if you don't make the super init you get a compile error.<br class=""><br class=""></div><div class=""><b class="">Now... I see the use of this. It ensure that all members are initialized. For example if A had a private variable (another strange choice here with what private means in swift but I haven't thought on it yet so... maybe is a cool choice), the B init could not initialize it. I also understand that the cases when you need this minor performance gain are rather rare (but they do still exist). So I guess the choice for the super.init() had that reasoning.<br class=""><br class=""></b></div><div class="">Still... my suggestion would be to give a warning, maybe force a key word before the init (like iKnowWhatImDoing init() {}), THEN in case vars are still not inited give a runtime error (afaik Objective C for example gives a warning). That ensures everything is ok and also allows programmers that have strange cases to treat them accordingly.<br class=""><br class=""></div><div class="">Anyway... that would be my suggestion. Maybe this was discussed before also... If this was discussed before can you please point me to the discussion? I like to understand the choices for the tools I use.<br class=""><br class=""><br class=""></div><div class="">P.S. Please excuse any grammatical errors... English is not my first language.<br class=""></div><div class=""><br class=""></div><div class="">Thank you for your time and have a great day,<br class=""></div><div class="">Petrescu Victor<br class=""></div></div></div></div>
_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></blockquote></div><br class=""></div></body></html>