<div dir="ltr"><div class="gmail_default"><span style="font-family:georgia,serif">According to you description, you should use </span></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_default"><span style="font-family:georgia,serif"><br></span></div><div class="gmail_default"><span style="font-family:georgia,serif">weak var parent:A!</span></div></blockquote><div class="gmail_default"><span style="font-family:georgia,serif"><br></span></div><div class="gmail_default" style="font-family:georgia,serif"><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div class="gmail_default" style="font-family:georgia,serif"><span style="font-family:arial,sans-serif;font-size:13px">Zhaoxin</span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jul 4, 2016 at 2:29 PM, Karl via swift-users <span dir="ltr">&lt;<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Currently it’s not possible to have an unowned optional value. E.g:<br>
<br>
class A {<br>
          unowned var parent : A?   // ‘unowned’ may only be applied to class and class-bound protocol types, not ‘A?&#39;<br>
          deinit {<br>
            if let p = parent { print(&quot;Bye, mom!&quot;) }<br>
            print(&quot;deallocating&quot;)<br>
        }<br>
}<br>
<br>
Sometimes you want an unowned value, but it doesn’t actually need to be set.<br>
<br>
In a specific case I was working on, we wanted to use a private embedded struct to wrap some functionality away as a unit, but we need a reference back to the enclosing instance. We could have a weak reference, but that comes with additional overheads, and it’s unnecessary because that struct code will all get inlined and the reference will just be a pointer back to ‘self’ (it would be cool if the compiler could detect that and just not emit the variable at all, but I don’t think it’ll do that). In any case, in order to initialise it with the parent that reference needs to be an optional/implicitly-unwrapped-optional (so that it can be initialised to nil and then set after the parent calls super.init).<br>
<br>
Given that weak optionals work, I’m tempted to think it’s a bug, but I’m asking in case it was intentionally omitted.<br>
<br>
<br>
_______________________________________________<br>
swift-users mailing list<br>
<a href="mailto:swift-users@swift.org">swift-users@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-users" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-users</a><br>
</blockquote></div><br></div>