<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div><div><span style="background-color: rgba(255, 255, 255, 0);">There's no good way of using extensions to expand the storage of an external module's type unless you're using Associated Objects underneath, but that has heavy performance implications (especially in threaded cases, which would require global locks on the associated object store). &nbsp;At most, I'd support a proposal for stored properties in extensions that reside in the same module &nbsp;as the class declaration, but it sounds like the team has bigger fish to fry right now.</span></div><div id="AppleMailSignature"><span style="background-color: rgba(255, 255, 255, 0);"><br></span></div><div id="AppleMailSignature"><span style="background-color: rgba(255, 255, 255, 0);">If possible, consider subclassing to extend a type's storage instead.</span></div><div id="AppleMailSignature"><span style="background-color: rgba(255, 255, 255, 0);"><br></span></div><div id="AppleMailSignature"><span style="background-color: rgba(255, 255, 255, 0);">Dan<br><br>Sent from my iPhone</span></div></div><div><br>On Sep 12, 2016, at 3:50 PM, Zhao Xin via swift-users &lt;<a href="mailto:swift-users@swift.org">swift-users@swift.org</a>&gt; wrote:<br><br></div><blockquote type="cite"><div><div dir="ltr"><div class="gmail_default" style="font-family:georgia,serif">​I don't know why the limit exists. Technical or on purpose. I hope someone inside can answer this.</div><div class="gmail_default" style="font-family:georgia,serif"><br></div><div class="gmail_default" style="font-family:georgia,serif">Zhaoxin​</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Sep 12, 2016 at 11:55 PM, Daniel Dunbar 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"><span class=""><br>
&gt; On Sep 11, 2016, at 6:12 PM, Tanner Nelson via swift-users &lt;<a href="mailto:swift-users@swift.org">swift-users@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt; Hey Swift Users,<br>
&gt;<br>
&gt; I was wondering how you all work around not being able to add stored properties in extensions (especially protocol extensions).<br>
&gt;<br>
&gt; I ran into an issue recently where I needed an internal stored variable for a protocol, but I didn't want the conformer to worry about implementing the variable.<br>
&gt;<br>
&gt; I ended up using something like this to achieve the effect.<br>
&gt;<br>
&gt;&nbsp; &nbsp; extension MyProtocol {<br>
&gt;&nbsp; &nbsp; &nbsp; &nbsp; private var address: String {<br>
&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mutating get {<br>
&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var id = ""<br>
&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; withUnsafePointer(to: &amp;self) { id = "\($0)"}<br>
&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return id<br>
<br>
</span>BTW, you can write `return withUnsafePointer(to: &amp;self) { "\($0)" }` instead.<br>
<span class=""><br>
&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br>
&gt;&nbsp; &nbsp; &nbsp; &nbsp; }<br>
&gt;<br>
&gt;&nbsp; &nbsp; &nbsp; &nbsp; var myStoredVar: Bool {<br>
&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mutating get {<br>
&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return _storage[address] ?? false<br>
&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br>
&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set {<br>
&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _storage[address] = newValue<br>
&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br>
&gt;&nbsp; &nbsp; &nbsp; &nbsp; }<br>
&gt;&nbsp; &nbsp; }<br>
&gt;<br>
&gt; Obviously not ideal, but I don't see another way to achieve this besides subclassing (which has its own problems for my situation).<br>
&gt;<br>
&gt; Wondering if anyone has run into this and come up with a better solution or other type of work around.<br>
<br>
</span>I don't have a better answer to this part.<br>
<br>
This particular solution only works if it is ok for `_storage[address]` to potentially be reused by a new instance, though (if the old instance is deallocated and the new one is allocated in its place).<br>
<br>
&nbsp;- Daniel<br>
<div class="HOEnZb"><div class="h5"><br>
&gt;<br>
&gt; Thanks!<br>
&gt; Tanner<br>
&gt; ______________________________<wbr>_________________<br>
&gt; swift-users mailing list<br>
&gt; <a href="mailto:swift-users@swift.org">swift-users@swift.org</a><br>
&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-users" rel="noreferrer" target="_blank">https://lists.swift.org/<wbr>mailman/listinfo/swift-users</a><br>
<br>
______________________________<wbr>_________________<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/<wbr>mailman/listinfo/swift-users</a><br>
</div></div></blockquote></div><br></div>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>swift-users mailing list</span><br><span><a href="mailto:swift-users@swift.org">swift-users@swift.org</a></span><br><span><a href="https://lists.swift.org/mailman/listinfo/swift-users">https://lists.swift.org/mailman/listinfo/swift-users</a></span><br></div></blockquote></body></html>